Доводим live-usb до ума

Статья спасена из блога на вордпрессе.

  1. Доводим live-usb до ума
    1. Почему SLAX?
    2. Как работает?
    3. Установка
      1. Локализация
      2. Языки ввода
    4. Синхронизация
    5. Приложение
      1. Как загрузиться с флешки, если BIOS не поддерживает загрузку с USB?
      2. Модули

Почему SLAX?

Моей задачей было создание портативной домашней системы. Я не хотел делать никакой служебный дистрибутив или что-то в этом роде. Для восстановления системы у меня есть SystemRescueCD, для проверки сетей — замечательный BackTrack, поэтому мне такое не нужно. Мне хотелось сделать так. чтобы на чужом компьютере всё было как дома.

За время моего использования GNU/Linux я совсем отвык от windows-интерфейса. Теперь я переключаю раскладку клавишей CapsLock, использую compose key, настраиваю систему через консоль, держу SSH на сервере, набираю код в VIM'е, управляю программами при помощи мышиных жестов, шифрую переписку, пользуюсь Jabber'ом... Мелочи, но их много.

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

В качестве дистрибутива я выбрал SLAX, потому что он:

Как работает?

Чтобы всем было непонятно, я расскажу, откуда в слаксе файлы берутся.

В директории slax/base/ лежат LZM-модули, из которых вылупляется базовая система. Сам модуль напоминает пакет, только с одним отличием — он никогда не распаковывается на физический носитель, а просто подключается к файловой системе. И не нужно никаких процедур установок или удалений: модуль либо подключён, либо нет. Для подключения стороннего модуля к системе достаточно набрать activate "имя_модуля" или положить его в директорию slax/modules/, откуда он сам подключится после запуска системы.

А как быть с данными, которые накапливаются в процессе работы? Они все складываются в директорию slax/changes/ на флеш-носителе. Например, если вы набрали документ и сохранили его по адресу /home/user/document.odf, то физически система положит его в slax/changes/home/user/document.odf. При следующем запуске так же загрузится базовая система из модулей, директория slax/changes/ подключится к корню и всё станет так, как было за сеанс предыдущей работы.

Следует отметить, что многие конфигурационные файлы (директория /etc) создаются live-скриптами каждый раз заново, поэтому бесполезно, например, редактировать /etc/X11/xorg.conf по своему вскусу — он всё равно будет стёрт после перезагрузки.

Но самое интересное — это возможность оверлея. В slax/changes/ хранятся не только данные о пользовательских файлах, но и данные об изменении уже существующих файлов из модулей! Допустим, мы хотим заменить утилиту ls своей версией, более продвинутой, с возможностью грабить караваны. Для этого нам нужно просто переместить её в директорию /bin/, заменив оригинальный файл. Разумеется, изменения вступят в силу немедленно: набрав ls в консоли, мы получим "продвинутую" версию. Тем временем на физический носитель запишется файл slax/changes/bin/ls, который после перезагрузки "перекроет" оригинальную версию из модуля. С оригинальной же версией ничего не происходит. То есть модули доступны только для чтения, но есть возможность изменения файлов, находящихся в них.

Таким образом, если новая версия ls окажется нестабильной, всё, что нам нужно для восстановления былой работоспособности — это удаление slax/changes/bin/ls. Так как система не найдёт утилиту ls в папке slax/changes/, она пойдёт за ней в модуль, где утилита оставалась без изменений всё это время. Как вы уже могли догадаться, "поломать" оригинальные системные файлы становится невозможно, а для ремонта нам всего лишь нужно почистить slax/changes/. Чего хочешь, то и твори.

Кстати, есть возможность не только изменять файлы из базовой системы, но и «удалять» их. Попробуйте разобраться, как это работатет.

Также сводится до банальности процесс обновления системы. Старые файлы просто заменяются файлами нового релиза, а slax/modules/ и slax/changes/ остаются нетронутыми. Поэтому все изменения за время жизни системы сохраняются, и никаких вам пакетных менеджеров и конфликтов.

Установка

Ставим на flash-носитель. Раздел на нашей флешке можно сформатировать в любую файловую систему — хоть в FAT, хоть в Ext2, хоть в ReiserFS. Везде заработает. Никаких своп-разделов не нужно: если таковые имеются на жёстком диске, они будут подключены при загрузке системы.

Несмотря на то, что SLAX, используя хитрые костыли, нормально работает в FAT'е, я НЕ рекомендую устанавливать систему на FAT-раздел. Просто потому, что в этом случае:

Кстати, я установил SLAX именно на FAT, и мне приходится терпеть все эти неудобства.

Итак, скачиваем последнюю версию дистрибутива в формате tar с ftp://slax.org/. Ещё лучше стянуть с торрента. Когда скачали — монтируем раздел на флешке в какую-либо директорию. У меня это /mnt/flash:

# mount /dev/sda1 /mnt/flash

Распаковываем скачанный архив в эту папку:

# tar xvf slax-*.tar -C /mnt/flash

Затем делаем этот раздел загрузочным. Для этого переходим в каталог boot/ на нашей флешке и запускам скрипт bootinst.sh:

# cd /mnt/flash/boot
# bash bootinst.sh

Всё. Можно перезагрузиться, настроить в BIOS'е загрузку с USB-Flash и пользоваться портативной системой.

Локализация

Вообще-то на официальном FTP-сервере есть всё необходимое для русификации. Но так как идущую по умолчанию локаль iso88595 мы в гробу видели, нам придётся идти другим путём.

Novah подготовил модуль, устраняющий все проблемы с русским языком. Опять же, мне в нём кое-что не понравилось, и я сделал свой.

Схема русификации несложная. Скачиваем два файла — модуль с локалями и загрузочный образ:

http://komar.in/lzms/russian-utf8/russian-utf8-6.0.7-i486-2.lzm
http://komar.in/lzms/russian-utf8/initrd.gz

Образ initrd.gz поместите в директорию boot/, модуль russian-utf8-6.0.7-i486-2.lzm — в slax/modules/. После перезапуска у вас будет полностью русифицированная система.

И не забудьте переключить кодировку в Konsole. Выбор кодировки — в меню.

Языки ввода

Пожалуйста, не надо ничего ковырять в xorg.conf. Он всё равно будет стёрт live-скриптами после перезагрузки. Прочитайте лучше моё руководство по переключению раскладок клавиатуры в KDE.

Синхронизация

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

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

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

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

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

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

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

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

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

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

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

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

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, её не тронут пакетные менеджеры и её удобно бекапить.

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

Приложение

Как загрузиться с флешки, если BIOS не поддерживает загрузку с USB?

Такое можно часто встретить на старых компьютерах. USB-контролёр есть, а загрузку с него BIOS не поддерживает. Дабы избежать такой несправедливости, Томас подготовил маленькие образы для CD, загружающие ядро и и загрузочный образ. Их можно найти на ftp://slax.org, записать на mini-cd и таскать при себе где-нибудь в кошельке.

Однако этот загрузочный образ сведёт на нет все наши старания по юникодизации системы. Если вы настраивали русский язык так, как писал я, то будет лучше записать образ с другим initrd, корректно работающим с русским языком. Такую исошку я сделал, её можно скачать под именем slax-boot-usb-from-cd-utf8-x.x.x.iso здесь:

http://komar.in/lzms/russian-utf8/.

Модули

Так как разработка SLAX'а сейчас фактически стоит на месте, приходится делать свои модули для необходимых программ.

Собранные мною модули в красивом каталоге со скриншотиками лежат на slax.org: http://www.slax.org/modules.php?author=874.

Но, по закону мироздания, это сайт часто бывает недоступным. Поэтому я зеркалирую их здесь: http://komar.in/lzms/.

Если интересуют только slaxbuild'ы — посмотрите здесь: http://komar.in/darcs/slaxbuilds/.