Доводим live-usb до ума
Статья спасена из блога на вордпрессе.
Почему SLAX?
Моей задачей было создание портативной домашней системы. Я не хотел делать никакой служебный дистрибутив или что-то в этом роде. Для восстановления системы у меня есть SystemRescueCD, для проверки сетей — замечательный BackTrack, поэтому мне такое не нужно. Мне хотелось сделать так. чтобы на чужом компьютере всё было как дома.
За время моего использования GNU/Linux я совсем отвык от windows-интерфейса. Теперь я переключаю раскладку клавишей CapsLock, использую compose key, настраиваю систему через консоль, держу SSH на сервере, набираю код в VIM'е, управляю программами при помощи мышиных жестов, шифрую переписку, пользуюсь Jabber'ом... Мелочи, но их много.
И чтобы можно было как-то работать на чужих машинах, я хотел сделать портативную систему, имитирующую мою домашнюю. Поставить её на флешку и таскать с собой повсюду. Ну не засунешь же ноутбук в карман?
В качестве дистрибутива я выбрал SLAX, потому что он:
- маленький, простой, лёгкий и быстрый;
- изначально создавался как live-дистрибутив и прекрасно выполняет эту роль;
- придерживается принципа KISS;
- имеет немалочисленное сообщество;
- построен на основе замечательной системы модулей, отдельно сохраняет изменения в файловой системе;
- может быть установлен на файловую систему FAT;
- поставляется со средой KDE, моей любимой.
Как работает?
Чтобы всем было непонятно, я расскажу, откуда в слаксе файлы берутся.
В директории 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-раздел. Просто потому, что в этом случае:
- возможны потери сохранённых данных в случае некорректного завершения работы;
- права на файлы и папки, символические ссылки, а так же регистр символов в именах файлов и папок будут сохраняться необычным способом;
- вы закалебаетесь чистить флешку от вирусов с Windows-машин.
Кстати, я установил 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 работает под 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
, её не тронут пакетные менеджеры и её удобно бекапить.
У меня синхронизация занимает несколько секунд. Пробуйте.
Приложение
Как загрузиться с флешки, если 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/.