Файлообмен и резервирование данных на Linux сервере с помощью Dropbox

Всем привет!

Опять Босс на работе сгенерировал очередное задание:
Имеем 2 офиса одной фирмы.

Задача:
Организовать файлообмен между ними.

У меня в голове возникло несколько решений этой задачи:

1) VPN туннель.
Такое решение слишком избыточно для простого файлообмена.

Плюсы:
Могут ходить в по сети в другой офис.
Лёгкость работы.
Шифрование данных
Сжатие данных

Из минусов:
Невозможно работать дома (я манагерам не доверяю, сертификаты не дам)
Нагрузка на интернет канал.
Из-за медленного канала возникнут тормоза при работе непосредственно с сетевой шары.
(можно конечно синхронизацию с локальной шарой сделать и пускай они с неё работают)
Избыточность для такой простой задачи.

2) FTP
Плюсы:
Простота реализации
Гибкие настройки
Можно работать дома

Минусы:

Сложность работы с FTP, манагеры этого точно не осилят.
Должен кто-то постоянно отгружать данные (Синхронизировать)

3) Подумав ещё немного я вспомнил про проект DropBox.
Особенно про Linux версию, которая может работать в качестве демона.


Плюсы:
Резервирование данных
Возможность отката
Можно работать из дома
Оптимизация интернет трафика
Шифрование данных
Сжатие данных перед отправкой
Абсолютная прозрачность для пользователя.

Минусы:

2 Гига места, но решается покупкой платного аккаунта.
Зависимость от сервиса.

Проанализировав эти три варианта я остановился на сервисе DropBox

Схема файлообмена:

Офис 1 <=> Samba шара <=> DropBox <=> internet <=> DropBox <=> Winodws шара (Офис 2)

Пояснения:

Папку ~/Dropbox я открою по сети через Samba сервер.
Всё что туда будет попадать, автоматически будет синхронизироваться с сервисом DropBox
Во втором офисе я ставлю Windows клиента DropBox и папку так-же открываю в сеть.

PS. Как вариант использования:
Можно например туда базы 1С разместить, и они будут бэкапиться автоматически.
Или просто туда какие-нидуь бэкапы скидывать или важные документы, всё зависит от Вашей фантазии.

Для начала нам требуется зарегистрировать на сервисе.
Сделайте одолжение:
Зарегистрируйтесь по моей реферальной ссылке, это даст мне и Вам дополнительное место (250 Мб)

Вот смотрю рефералы (Спасибо кто по ссылке регистрируется).

Для получения дополнительного места нужно выполнить 3 этапа:
1) Перейти по реферальной ссылке
2) Зарегистрироваться
3) Установить программу клиент Dropbox

Установка клиента DropBox на Linux без GUI

Если у Вас есть GUI на сервере, то для Вас задача существенно упрощается:

Вам просто нужно скачать один из архивов (ссылки ниже)

Например:
wget -O dropbox.tar.gz http://www.getdropbox.com/download?plat=lnx.x86


Разархивировать:

tar zxof dropbox.tar.gz

И перенисти полученные файлы в свою домашнюю директорию
mv .dropbox-dist ~/.dropbox-dist/

Запустить демона.
~/.dropbox-dist/dropboxd &

И заполнить данные своего аккаунта.

Я же работаю через с серверами удалённо через SSH и GUI мне вообще не нужен.

Приступаем:

Качаем подходящий архив для Вашего Linux'a (32 бита или 64 бита)

Поскольку у меня 32-х битная версия Linux, я разумеется выбрал 32-х битную версию

Качаем:
cd /tmp
wget -O dropbox.tar.gz http://www.getdropbox.com/download?plat=lnx.x86

Распаковываем:
tar zxof dropbox.tar.gz

И переносим полученные файлы в свою домашнюю директорию
mv .dropbox-dist ~/.dropbox-dist/

Далее нам потребуется пара программ на python'e

Качаем их:

wget http://dl.getdropbox.com/u/6995/dbmakefakelib.py
wget http://dl.getdropbox.com/u/6995/dbreadconfig.py (не обязателен)

Затем выполняем первую - dbmakefakelib.py
python dbmakefakelib.py

И видим такую строку:
dropboxd ran for 15 seconds without quitting - success?

Значит всё прошло хорошо.

Идём дальше.

Выполняем вторую программу dbreadconfig.py
Она нам нужна, что-бы узнать HostID
python dbreadconfig.py

host_id = 739bfe362f3bb3246da99dc8d20dbe2b
last_revision = None
schema_version = 6

Лично у меня эта программа не запустилась.
Решено было воспользоваться вторым способом: через sqlite
cd .~/.dropbox

Выполняем:
sqlite3 dropbox.db

SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

Вводим:
.dump config

И в ответ получаем что-то типа этого:

BEGIN TRANSACTION;
CREATE TABLE config (
id INTEGER PRIMARY KEY,
key TEXT NOT NULL UNIQUE,
value TEXT
);
INSERT INTO "config" VALUES(1,'schema_version','STYKLg==
');
INSERT INTO "config" VALUES(2,'last_revision',NULL);
INSERT INTO "config" VALUES(3,'host_id','VmJjYTZiY9Y2MGY1OGExMjA5ODc0ODU6NWZmMzNhY2VmCnAxCi7=
');
COMMIT;

Нас интересует вот это, у Вас будет своё значение (в примере я исказил свои данные):
VmJjYTZiY9Y2MGY1OGExMjA5ODc0ODU6NWZmMzNhY2VmCnAxCi7=

Это и есть идентификатор Вашего хоста, но он зашифрован по технологии Base64

Ну что ж, расшифруем:

Способ 1:

Используем интернет.
Идём по ЭТОЙ ссылке и вставляем туда наше значение.

Способ 2:

Без соединения с интернетом.
Воспользуемся утилитой base64
Делаем так:
echo "VmJjYTZiY9Y2MGY1OGExMjA5ODc0ODU6NWZmMzNhY2VmCnAxCi7=" > /tmp/enc.txt
base64 -d /tmp/enc.txt

В результате любого способы мы получим например такое значение:
Vbca6bc60f58a120987485р5ff33acef

Отбрасываем буквы V спереди и получаем такое значение:
bca6bc60f58a120987485р5ff33acef

Это и есть на HOSTID

Идём по ссылке:
https://www.getdropbox.com/register?host_id=HOSTID

Это можно сделать с любого ПК подключённого к интернету, не обязательно с сервера.

HOSTID нужно заменить на свой, полученный на предыдущим шаге.
В наше случае будет такая ссылка:
https://www.getdropbox.com/register?host_id=bca6bc60f58a120987485р5ff33acef

Далее просто вводим своё имя и пароль, снизу будет имя Вашего сервера.
После авторизации Ваш хост будет добавлен в список хостов.
Повторите данную операцию для всех ПК, которые будут использовать в файлообмене.

Осталось совсем немного, создать папку Dropbox в своей домашней директории:
mkdir ~/Dropbox

И запустить демона.
~/.dropbox-dist/dropboxd &

Ну и разумеется написать скрипты для автостарта, примеры для Gentoo, Fedora/RedHat, Debian Вы можете посмотреть в Источнике

Всё, теперь можно насаждаться всеми прелестями сервиса DropBox

UPD:
Заметил, DropBox не синхронизирует файлы и папки с русскими именами.
Причём именно Linux клиент, хотя у меня вся система работает в юникоде.
Надеюсь, в будущем профиксят.

Gentoo: Получи SMS когда закончится сборка пакета

Всем привет!

Вот наткнулся на интересную статью для пользователей Gentoo.

Идея: Поставить сборку пакета (или обновление мира) с помощью emerge и получить SMS при выполнении.

Реализация:

Нам потребуется:
mailx client (mail-client/mailx) - это консольное приложение для отправки почты.
MTA (mail transfer agent) агент для mailx (Postfix, Sendmail или ssmtp)

Скрипт: /usr/local/sbin/emobalert
Copy SourceCopy HTML

  1. #!/bin/sh

  2. # Record exit status of emerge–must precede ALL other commands!

  3. [ $? -eq 0 ] && RESULT=”PASS” || RESULT=”FAIL”

  4. # Change next line to your mobile/SMS address

  5. SMS_ADDR=”2015551212@sms.some-mobile.com”

  6. LAST_PKG=”$(tac /var/log/emerge.log | awk$2 == “>>>” {print $4,$5,$6,$7; exit;}’)”

  7. CFG_MODS=”$(find /etc -iname ‘._cfg????_*’ | wc -l)”

  8. mail -s”Emerge Completed” $SMS_ADDR <<-EOM

  9. ${RESULT} ${LAST_PKG}

  10. :::

  11. ${CFG_MODS} config updates pending

  12. $*

  13. EOM



Замените SMS_ADDR на Ваш телефон и SMS шлюз оператора.
И сделайте скрипт исполняемым.

Запуск:

Например вот так:
emerge -uDv world; emobalert

И по окончании сборки Вы получите такое сообщение:
From: root@localhost.localdomain
(Emerge Completed)
PASS (2 of 2) app-crypt/seahorse-2.22.3
:::
0 config updates pending

По моему очень удобно.

Источник

Разработка кластера сервера печати на базе Windows server 2008

Всем привет!

Сейчас у меня очень напряжённое время.
Диплом, собеседование в консульстве, работа ...
Ещё где-то 1.5 недели напряга, Вы можете следить за моими делами в твиттере.

Выкладываю свой курсовой проект, посвященный построению кластера печати на базе ОС Windows server 2008

Моё видео:

http://rutube.ru/tracks/1790402.html?v=476d1263f41d646e301a7b0d985ac21f

Описание построения читаем ТУТ
Само видео записано до момента добавления общего SCSI диска.
Поскольку такового у меня нет и эмулятор его создать не позволяет.
Впрочем там всего-то 2 кнопки остаётся нажать до окончания построения.

Надеюсь что найду время написать что-нибудь интересное.

Загрузчик PLOP - загрузись с чего угодно и где угодно

Всем привет!
Сегодня хочу поделиться с Вами информацией об очень интересном загрузчике - Plop
Вот список того что он умеет:
* CD/DVD boot without BIOS support
* USB boot without BIOS support (UHCI, OHCI and EHCI)
* Floppy boot
* Different profiles for operating systems
* Define up to 16 partitions
* No extra partition for the boot manager
* Hidden boot, maybe you have a rescue system installed and the user should not see that there is another system installed
* Boot countdown
* Hide partitions
* Password protection for the computer and the boot manager setup
* Backup of partition table data
* Textmode user interface 80x50
* Graphic user interface 640x480, 800x600, 1024x786, 1280x1024
* MBR partition table edit
* Start of the boot manager from harddisk, floppy, USB, CD, DVD
* Starting from Windows boot menu
* Starting from LILO, GRUB, Syslinux, Isolinux, Pxelinux (network)
* The boot manager is freeware

Самая любопытная его возможность - загрузка с USB и CD дисков на тех материнских платах, где эта возможность отсутствует (Старые материнские платы).
И что самое интересное, он позволяет получить USB 2.0 скорость на тех материнских платах, на которых эта возможность урезана (касается первых материнских плат, с поддержкой загрузки с USB устройств).

Например Ваша мат.плата выдаёт USB 2.0 скорость в ОС Windows или Linux, но при загрузке с USB работает на USB 1.1 и грузиться ОЧЕНЬ медленно.

Начнём Мы как обычно с установки.

Для начала скачаем последнюю стабильную версию Plop.
В моём случае это версия - plpbt-5.0.3
После распаковки zip архива я советую Вам сперва изучить файл readme.txt, в котором содержаться все инструкции по установке и прочая интересная и полезная информация.

Кратко рассмотрим некоторые варианты установки, благо разработчики позаботились о том, что-бы Plop можно было быстро и легко установить практически на любой носитель информации.

Хотите установить Plop на дискету?
Нет ничего проще, просто выполните:

Для ОС Linux:
dd if=plpbtin.img of=/dev/fd0

Для установки из-под DOS можно воспользоваться утилитой diskimg.com:
diskimg.com with diskimg -d a -w plpbtin.img

Хотите установить Plop на CD диск?
Просто прожгите ISO образ на свой носитель.

Пользователи ОС Windows могут это сделать с помощью бесплатной программы для записи дисков - CDBurnerXP или воспользоваться любой другой программой для записи дисков.

Пользователи ОС Linux могут воспользоваться программой - cdrecord
cdrecord -v dev=devicename iso_image

Установка Plop:

Для ОС DOS:

1) Скачайте plpgenbtldr-0.5.zip
2) Скопируйте файлы plpinstc.com и plpgenbtldr.exe в корень диска C:
3) Переименуйте файл plpinstc.com в plpbt.bin
4) Откройте shell с правами администратора системы
5) Выполните файл plpgenbtldr который создаст файл plpbtldr.bin, это займёт несколько секунд.
Если это займёт больше времени, то значит что-то пошло не так.

Для Windows 2K и XP:
Просто впишите эту строчку в Ваш файл boot.ini:
c:\plpbtldr.bin="PLoP Boot Manager"

Разумеется файл plpbtldr.bin должен быть в корне диска c:

Для Windows Vista:

Просто выполните такую команду:
bcdedit /create /d "Install PLoP Boot Manager" /application bootsector

После выполнения этой команды вы получите номер в { } скобках.
Этот номер зовётся (Called) id

Дальше выполните следующие команды, заменяя id на свой, полученный из предыдущей команды:
bcdedit /set {id} device boot

bcdedit /set {id} path \plpbtldr.bin

bcdedit /displayorder {id} /addlast

Установка для Syslinux, Isolinux, Pxelinux (Network)
Добавьте plpinstc.com в следующие конфигурационные файлы:
* для Syslinux это syslinux.cfg
* для Isolinux это isolinux.cfg
* для Pxelinux это pxelinux.cfg/default

Добавьте следующие строки в эти файлы конфигурации:
label plpinst
kernel plpinstc

Файл plpinstc положите в корень папки с конфигами.

Если же Вам просто нужно запустить Plop без его установки, то впишите такие строчки:
label plp
kernel plpbt

Файл plpbt так-же положите в корень папки с конфигами и в загрузчике выберите пункт plp

Установка с использование LILO:

Скопируйте файл plpinstc.com в папку /boot
В файл /etc/lilo.conf допишите:
image=/boot/plpinstc.com
label=plop-install

Для запуска Plop без его установки:

Скопируйте файл plpbt.bin в папку /boot
Добавьте такие строчки в файл lilo.conf:
image=/boot/plpbt.bin
label=PLoP

И выполните команду lilo для обновления конфигурации.

Установка с использование GRUB / grub4dos

Скопируйте файл plpinstc.com в папку /boot

В файл menu.lst впишите следующие строки:
title PLoP Boot Manager Install
root (hd0,0)
kernel /boot/plpinstc.com

Для запуска Plop без его установки:

Скопируйте файл plpbt.bin в папку /boot

В файл menu.lst впишите следующие строки:
title PLoP Boot Manager
root (hd0,0)
kernel /boot/plpbt.bin

Конфигурирование Plop:
Настройка производится путём патчинья самого загрузчика Plop с помощью утилиты plpcfgbt

Например, если Вам нужно сделать загрузку с usb устройства и без лишних вопросов, то введите такую строку:
plpcfgbt.exe stm=hidden cnt=on cntval=1 dbt=usb plpbt.bin

Полный список опций можно посмотреть в файле 1README.TXT в директории с программой.

А теперь рассмотрим реально полезный пример использования Plop:

Задача:

1) Получить USB 2.0 или близкую к нему скорость на тех материнских, которые работают с USB 2.0 только в загруженной ОС, а на этапе загрузки выдают USB 1.1

2) Загрузиться в PCI USB 2.0 внешнего конроллера.

Решение:

1) Устанавливаем Plop на ваш носитель информации, я решил воспользоваться свой BootFlash с Grub4DOS в качестве загрузчика.
Общая схема загрузки будет выглядеть так:
Grub4DOS (usb1.1) => Plop => Grub4DOS (usb 2.0)

Устанавливаем:
Копируем файл plpbt.bin на Flash накопитель, в папку /boot или в любое удобное для Вас место.
В файл menu.lst пишем:
title Start PLoP Usb driver
find --set-root --ignore-floppies /boot/plpbt.bin
kernel /boot/plpbt.bin

Сохраняем и пробуем.

Так-же можно сделать загрузку iso образа через RAM:
Скопируем ISO образ в корень диска, в файл menu.lst впишем следующие строки:
title Plop RAM
map --mem (hd0,0)/plop/plpbt.iso (hd32)
map --hook
chainloader (hd32)
boot

Сохраняем и пробуем.

2) В этом случае мы просто устанавливаем Plop на наш HDD,CD-ROM диск или дискету и в качестве устройства выбираем USB

Plop автоматически просканирует все USB порты и загрузить Ваш LiveUSB накопитель.

Думаю для ознакомления пока-что достаточно.
Возможно в будущим я продолжу публиковать информацию по этому замечательному загрузчику.

Скрипты для переподключения pppoe соединения на ADSL модеме

Всем привет!

На неделе от безделья написал скрипты для сброса PPPOE сессии на ADSL модеме через ПК
Поскольку у меня нет белого IP адреса я пользуюсь ими для переподключения сессии.
Это позволяет мне качать с файлообменников без задержек и ожидания.

Скрипты написаны для ОС Linux
Требуется программа - expect
На смену IP адреса уходит ~20 секунд.
Тестировалось на модеме StarNet перешитый в Acorp Lan 120


Идея:

При обрыве соединения ppp0 происходит автоматическое переподключение.
Всего 3 скрипта, всё сложить в одну папку.

p1 - Узнаёт PID демона PPPD

Листинг:
Copy SourceCopy HTML

  1. #!/usr/bin/expect -f

  2. log_user 0

  3. spawn telnet 192.168.1.1

  4. expect "BusyBox on router login:" {send "root\r"}

  5. expect "Password:" {send "Admin\r"}

  6. expect "#" {send "ps ax |grep pppd\r"}

  7. log_user 1

  8. send "exit\r"

  9. expect eof



p2 - Убивает PPPD по PID возвращённому скриптом run.sh (смотри ниже)
И модем СРАЗУ автоматически поднимает заново.

Листинг:
Copy SourceCopy HTML

  1. #!/usr/bin/expect -f

  2. set pid [lindex $argv 0]

  3. log_user 0

  4. spawn telnet 192.168.1.1

  5. expect "BusyBox on router login:" {send "root\r"}

  6. expect "Password:" {send "Admin\r"}

  7. expect "#" {send "kill $pid"}

  8. send "exit\r"

  9. expect eof



Скрипт run.sh - Парсит PID от p1 и отсылает его в качестве аргумента p2 который и прибивает PPPD
Листинг:
#!/bin/sh
./p1 | grep pppd | grep -v grep | awk '{print $1;}' | xargs ./p2

Даём права на исполнение и просто делаем: ./run.sh
Всё остальное пройдёт автоматом.
Поправьте IP модема на свой.

Для желающих прикрутить цикл проверки IP:
Пропарсить IP с модема можно на пример так:
ifconfig eth0 | colrm 1 10 | awk -F "[: ]" '$1 ~ /^inet$/{print $3}'

Т.е пишем например скрипт p3 который возвращает ip
Вот готовый:
Copy SourceCopy HTML

  1. #!/usr/bin/expect -f

  2. log_user 0

  3. spawn telnet 192.168.1.1

  4. expect "BusyBox on router login:" {send "root\r"}

  5. expect "Password:" {send "Admin\r"}

  6. expect "#" {send "ifconfig ppp0\r"}

  7. log_user 1

  8. send "exit\r"

  9. expect eof



И парсим его вывод.
Например:
$ ./p3.sh | colrm 1 10 | awk -F "[: ]" '$1 ~ /^inet$/{print $3}'
90.151.225.121

Скрипты можно модифицировать, например:
Можно написать цикл проверки IP адреса если Вас интересует конкретный диапазон IP.

В общем всё зависит от Вашей фантазии.

eee pc 701 включение и выключение WIFI и WEB камеры из Linux

Всем привет!

В связи с началом весны у меня резко прибавилось работы, поэтому писать сейчас буду по реже.

Сегодня небольшая статейка про Eee PC 701, а точнее про WiFi и WEB камеру.

Суть проблемы:
Требуется включать и выключать WiFi и WEB камеру без перезагрузки в OS Linux.

PS. К сожалению ACPI ещё не допилили для обработки HotKey

Решение:

Воспользоваться скриптами.

Приступим:

Для начала пересоберём ядро до версии 2.6.29
Вот мой конфиг:

http://www.mediafire.com/?mlttyjxykcg

Далее пишем скрипты:

wifi.sh и camera.sh

Для WiFI:
Copy SourceCopy HTML

  1. #!/bin/bash

  2. PWR=$(cat /sys/class/rfkill/rfkill0/state)

  3. case $1 in

  4. poweron)

  5. if [[ "$PWR" = "0" ]]; then

  6. echo 1 > /sys/class/rfkill/rfkill0/state

  7. sleep 1

  8. fi

  9. ;;

  10. poweroff)

  11. if [[ "$PWR" = "1" ]]; then

  12. ifconfig wlan0 down

  13. sleep 1

  14. echo 0 > /sys/class/rfkill/rfkill0/state

  15. fi

  16. ;;

  17. esac



Для камеры:
Copy SourceCopy HTML

  1. #!/bin/bash

  2. PWR=$(cat /sys/devices/platform/eeepc/camera)

  3. case $1 in

  4. poweron)

  5. if [[ "$PWR" = "0" ]]; then

  6. echo 1 > /sys/devices/platform/eeepc/camera

  7. sleep 1

  8. fi

  9. ;;

  10. poweroff)

  11. if [[ "$PWR" = "1" ]]; then

  12. echo 0 > /sys/devices/platform/eeepc/camera

  13. fi

  14. ;;

  15. esac



Запускать так:
Для WiFi:

wifi.sh poweron
wifi.sh poweroff


Для камеры:
camera.sh poweron
camera.sh poweroff