Доводим live-usb до ума, часть 4: Синхронизация.

Очень удобно работать за чужим компьютером, если на нём есть копии своих данных. Если речь не идёт об их утечке, разумеется. А когда к любому компьютеру можно подцепить флешку, загрузить SLAX и работать свою работу как ни в чём не бывало, а потом ещё и перенести через ту же флешку наработанную работу к себе домой — то это вообще отпад. Как можно догадаться, для этого нужно регулярно синхронизировать данные между флеш-носителем и своим родным десктопом. О некоторых тонкостях этого дела я сейчас расскажу.

Для начала нужно решить, что мы будем синхронизировать. Это могут быть:

  • программы;
  • их настройки;
  • создаваемые нами самими данные.

Первый пункт выпадает сразу, потому что мы используем разные дистрибутивы. Если начать синхронизировать софт, то получится страшный бардак, в котором не будет работать ничего. Свои любимые программы надо установить на портативную систему самостоятельно, найдя хорошие модули или собрав их самому.

С настройками вроде бы всё понятно: если я отключил функцию варки кофя в emacs, то я хочу видеть эту функцию отключённой и на своей портативной системе! Синхронизируя конфигурационные файлы между системами, у меня будут одинаковые настройки и одинаковое поведение программ на обеих системах. Но и тут не всё ладно. Бестолково, например, синхронизировать файлы из каталога /etc, часть которых всё равно перезаписывается при каждом старте SLAX’а.

Также следует понимать, что на не все настройки мы хотим видеть одинаковыми. Запись логов в IRC-клиенте — очень полезная вещь на десктопе, но писать их на флеш-носитель неразумно: он имеет ограниченное количество циклов перезаписи и от такой эксплуатации накроется быстрее обычного. Ярлычки на панельке могут радовать глаза, но на портативной системе, где не окажется запускаемых ими программ, они окажутся совершенно бесполезными.

И так далее. Выбирайте то, что вам действительно нужно. Ещё лучше сначала посмотреть, без обновления каких настроек жить не мила, а потом уже отмечать нужное.

Копия наших рабочих данных на SLAX’е позволяет нам за любым компьютером скоротать время, занимаясь любимой работой. Пописать, покодить.

  • Собственно, большая часть статей была написана как раз в те моменты, когда за чужим компьютером было нечем заняться.

Тут просто помните об одном побочном эффекте. Наша флешка — не только переносная система, но и место для бекапа. Очень удобное и быстрое. Так что чем ценнее данные, тем нужнее они в списке на синхронизацию.

  • Только не забывайте, что вашу флешку — и все данные на ней — могут украсть. Шифрования мы пока ещё не прикрутили.

Главным инструментом для синхронизации будет Unison.

  • Unison — утилита для синхронизации файлов, написанная на языке OCaml. Она позволяет синхронизировать две копии файлов, на локальном компьютере или на двух разных хостах, обновляя каждую копию в зависимости от произведённых изменений.

    • Unison работает под Unix-подобными операционными системами и под Windows. Он также может работать с разными платформами одновременно, например, синхронизируя файлы между Windows-ноутбуком и Unix-сервером.
    • В отличие от простых утилит для создания зеркал и бекапов, Unison умеет работать с изменениями в обеих копиях файлов. Неконфликтующие изменения могут вноситься автоматически, конфликтующие определяются и отображаются для ручного разрешения.
    • Unison — не распределённая файловая система, а потому может работать без дополнительных модулей в ядре и прав суперпользователя.
    • Unison работает между любыми компьютерами, соединёнными между собой глобальной или локальной сетью, через сокет или зашифрованное соединение. Он аккуратно относится к ширине канала и прекрасно работает даже на медленных PPP-соединениях. Передача небольших изменений больших файлов оптимизируется протоколом, похожим на rsync.
    • Unison устойчив к сбоям, позволяет восстановить копии файлов после обрыва связи или некорретного завершения работы.
    • Unison имеет чистую, точную спецификацию, а исходный код Unison’а доступен по лицензии GPL.

Unison нам понадобиться главным образом на нашем десктопе, так что установите его с помощью своего любимого пакетного менеджера. Иногда он будет нужным и на флешке, поэтому скачайте мой lzm-модуль юнисона и поместите его в slax/modules.

  • Для любителей графических интерфейсов я специально не собрал GUI-версию unison’а — чтобы не выкабенивались и сами почувствовали удобство консольной версии.

Сначала надо научиться работать с этой штукой. Создайте где-нибудь две директории и напихайте в одну и в другую разных файлов. Затем наберите в командной строке unison и смотрите на вывод.

Нам будут показаны два столбика — для первой и для второй папки, справа от них — синхронизируемый файл, а так же срелки между двумя директориями. Где начало стрелки — папка, в которой было произведено изменение, а где конец — где его не было и куда нужно эти изменения внести. То есть файл как бы переносится из начала стрелки в конец. Если такая стрелка есть — значит, файл не конфликтует, и, если вы этого хотите, unison сделает действие по умолчанию. Для этого нужно нажать F. Если с действием по умолчанию вы по какой-то причине не согласны — нажмите на > или <, «поворачивая» стрелку в ту сторону, в которую вам нравится. Если вы не хотите ничего делать с этим файлом — поставьте / (слеш), и файл просто пропустится.

  • Ещё один немаловажный момент. Перед первым боевым запуском синхронизируйте и часовые пояса на обеих системах. Проще всего это сделать кликнув правой кнопкой по «часикам» в KDE. При определённых обстоятельствах это может привести к тому, что даты изменения файлов будут различаться на несколько часов.

Подробнее о юнисоне написано в документации на официальном сайте. Прочитайте, там всё не так страшно, как кажется. Здесь я лишь покажу, как получилось у меня.

  • Кстати, можно избавиться от многих проблем, связанных с различием логинов, сделав на SLAX’е символическую ссылку в /home на директорию /root. Например, /home/user -> /root

Я сделал файл ~/.unison/slax.prf следующего содержания:

#
# Paths for synchronization
#

# Unison :)
path = .unison/slax.prf

# Vim
path = .vimrc

# Bash
path = .bashrc

# KWallet
path = .kde/share/apps/kwallet/
path = .kde/share/config/kwalletrc

# SSH
path = .ssh/

# Kontact
path = .kde/share/config/kontactrc
path = .kde/share/config/kontact_summaryrc
path = .kde/share/apps/korganizer/
path = .kde/share/config/kaddressbookrc
path = .kde/share/apps/kabc/
path = .kde/share/apps/kontactsummary
path = .kde/share/config/kcmkmailsummaryrc
path = .kde/share/config/kcmkorgsummaryrc
path = .kde/share/config/kcmsdsummaryrc

# My signature for emails
path = .signature

# Basket
path = .kde/share/apps/basket
path = .kde/share/config/basketrc

# Konversation
path = .kde/share/apps/konversation
#path = .kde/share/config/konversationrc # Because log settings

# Konqueror
path = .kde/share/config/konquerorrc
path = .kde/share/apps/konqueror/bookmarks.xml
path = .kde/share/apps/konqueror/konqueror.rc
path = .kde/share/apps/konqueror/profiles/
path = .kde/share/apps/kcookiejar/cookies # Konqueror's cookies
path = .kde/share/config/khtmlrc # Konqueror's AdBlock

# Kopete
path = .kde/share/apps/kopete_cryptography
#path = .kde/share/apps/kopete_history
path = .kde/share/apps/kopete
#path = .kde/share/apps/kopete_statistics
path = .kde/share/config/kopeterc

# Konsole
path = .kde/share/config/konsolerc
path = .kde/share/config/konsolepartrc
path = .kde/share/apps/konsole/

# Yakuake
path = .kde/share/config/yakuakerc
path = .kde/share/apps/yakuake # always empty?

# KDE hotkeys
path = .kde/share/config/khotkeysrc

# KWin rules
path = .kde/share/config/kwinrulesrc

# Developers! Developers! Developers!
path = devel/

#
# Ignore paths
#

# Ignore sockets
ignore = Name *socket*

# Ignore cache
ignore = Path .kde/cache-*
ignore = Path .kde/share/apps/konqueror/faviconrc

# Kopete cache too
ignore = Path .kde/share/apps/kopete/jabber-capabilities-cache.xml
ignore = Path .kde/share/apps/kopete/jabberphotos
ignore = Path .kde/share/apps/kopete/oscarpictures

# Ignore temporary files
ignore = Name lock
ignore = Name *random_seed*
ignore = Name *.new
ignore = Name std.vcf__*

# Ignore SLAX specific files
ignore = Name .pxovl*

И добавил в /usr/local/bin/ на обоих системах два похожих, но разных скрипта.

/mnt/flash/slax/changes/usr/local/bin/slaxsync
#!/bin/sh
# Synchronization script for SLAX.
# Version for USB-Flash.
[ "$1" = "" ] && home="/mnt/hda2/home/komar/" || home=$1
unison slax \
$home \
/root/

/usr/local/bin/slaxsync
#!/bin/sh
# Synchronization script for SLAX.
# Version for home.
unison slax -perms 0 \ # Because I use FAT
$HOME \
/mnt/flash/slax/changes/root/

  • В директорию /usr/local/bin/ сам Бог велел класть самописные скрипты, так как она во многих дистрибутивах по умолчанию включена в $PATH, её не тронут пакетные менеджеры и её удобно бекапить.

У меня синхронизация занимает несколько секунд. Пробуйте.

3 комментария

Filed under Без рубрики

3 responses to “Доводим live-usb до ума, часть 4: Синхронизация.

  1. Михаил

    Спасибо за подробную рекомендацию!

    У меня вопрос-просьба.
    Я установил версию Unison для Windows XP, но работать не смог: если в пути к каталогу кириллические имена, он не понимает.

    Может, что-нибудь подскажете?

  2. Alexander Markov

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

    Надо, конечно, сделать патчик, но для этого нужно собирать ocaml на венде, а это то ещё приключение.

  3. Михаил

    Спасибо за совет! Буду изучать и пытаться.
    Странно, что нигде не смог найти помощи, кроме как у Вас.
    Может, в русскоговорящем сообществе Unison мало кто использует.
    Наверное, нужно было искать на английском.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s