Создаем Live USB на основе Debian Squeeze

У всех ИТ-шников, и не только, валяются дома/на работе старые флешки, которые остались не у дел в связи с бурным НТП или по другим причинам. Выбрасывать их не стоит, так как подобный девайс вполне сгодится как носитель для «заточенной» под ваши нужды live системы. Что такое live системы и зачем они нужны думаю рассказывать ненужно. Оспорить выбор флеш носителя по сравнению с CD/DVD тоже, думаю, врятли кто-то сможет. Удобство транспортировки и хранения налицо. И даже если флешка сдохнет сама по себе, img образ, который мы создадим, всегда можно накатить на другой USB носитель (или даже CD/DVD если очень захочется).  Итак, если все-таки у вас есть флешка (подойдет размер от 128MB до бесконечности ) и желание создать live систему на основе Debian — тогда вперед!
Для создания своего live-USB я выбрал программу live-build. Она представляет из себя набор скриптов для облегчения конфигурирования и сборки образов. Перед установкой рекомендую глянуть на документацию проекта на официальном сайте в интернете.
Начнемс, установим нужный пакетик live-build из стандартного репозитария Debian:

root@test-686:~# aptitude update && aptitude install live-build

Основной инструмент установлен, теперь создадим директорию где мы будем собирать live систему:

root@test-686:~# mkdir liveusb

Переходим в нее:

root@test-686:~# cd liveusb

И самое интересное — такой вот огромной командой я задаю большинство из нужных мне параметров будущей live системы:

root@test-686:~# lb config --syslinux-timeout 3 --bootappend-live "username=admin timezone=Europe/Kiev" --architecture i386 -b usb-hdd --mirror-binary http://debian.org.ua/debian/ --mirror-binary-security http://debian.org.ua/debian-security/ --archive-areas "main contrib non-free" --packages "gzip bzip2 rar unzip mc vim rsync lftp elinks ntfsprogs smbfs ntfs-3g e2fsprogs xfsprogs reiserfsprogs genisoimage wodim jfsutils dosfstools screen centerim-utf8 nmap tcpdump iftop mtr-tiny expect"

что это все значит:
lb config — говорит live-build-у что нужно сконфигурить будущую live систему (если дальше свои конфиги не задавать — получим некий default)
—syslinux-timeout 3 — time out для загрузчика 3 секунды — после этого автозагрузка ливки
—bootappend-live «username=admin» — пользователь который будет в live системе — admin
—architecture i386 — архитектура
-b usb-hdd — говорим что образ в результате нужен img для использования на USB HDD
—mirror-binary http://debian.org.ua/debian/ — основной репозитарий в live системе
—mirror-binary-security http://debian.org.ua/debian-security/ — security репозитарий в live системе
—archive-areas «main contrib non-free» — директории репозитария для использования в live системе
—packages «gzip bzip2 rar unzip mc vim rsync ….» — пакеты которые нужно установить в live систему во время сборки
К сожалению не все настройки данной командой можно сделать. Мне нужен ssh-server при загрузке с ливки, для реализации этого в официально документации рекомендуют применять так называемые hook-и. По своей сути это просто sh скриптик который выполнится автоматически при создании live системы. Мой вариант выглядит вот так:

root@test-686:~/liveusb# cat openssh-server.sh
#!/bin/sh

echo "HOOK: ssh server"

# install
apt-get install --yes --force-yes -y openssh-server
root@test-686:~/liveusb#

его нужно скопировать в директорию /root/liveusb/config/chroot_local-hooks :

root@test-686:~/liveusb# cp openssh-server.sh config/chroot_local-hooks

и сделать исполняемым:

root@test-686:~/liveusb# chmod +x config/chroot_local-hooks/openssh-server.sh

Также мне нужен определенный (известный мне) пароль рута на ливке. Для этого мне пришлось ваять такой вот hook:

root@test-686:~/liveusb# cat ch_root_passwd.sh
#!/usr/bin/expect --
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
# Executable only by root

set password _my_password_
spawn /usr/bin/passwd root
expect "password:"
send "$password\r"
expect "password:"
send "$password\r"
expect eof
root@test-686:~/liveusb#

И опять же, скопировать в директорию config/chroot_local-hooks

root@test-686:~/liveusb# cp ch_root_passwd.sh config/chroot_local-hooks

и дать права на выполнение:

root@test-686:~/liveusb# chmod +x config/chroot_local-hooks/ch_root_passwd.sh

Также я хочу чтобы live система стартовала со статическими настройками сети (по умолчанию dhcp)
Для этого я извернулся вот так:
создаем директорию config/chroot_local-includes/etc

root@test-686:~/liveusb# mkdir config/chroot_local-includes/etc

и туда закидываем файлик rc.local с вот таким содержимым

root@test-686:~/liveusb# cat config/chroot_local-includes/etc/rc.local
#!/bin/sh -e
#
# rc.local
/sbin/ifconfig eth0 192.168.1.99/24
exit 0
root@test-686:~/liveusb#

И делаем данный файл исполняемым:

root@test-686:~/liveusb# chmod +x config/chroot_local-includes/etc/rc.local

С конфигурацией будущей ливки закончили.
Дальше собираем! Для этого командуем:

root@test-686:~/liveusb# lb build

Если у вас все нормально с инетом — то все соберется без проблем. Все что останется — записать образ на флешку. Делается это старой доброй командой dd вот так (у меня флешка /dev/sdc):

root@test-686:~/liveusb# dd if=binary.img of=/dev/sdc

После этого можно пользоваться 🙂
На самом деле инструмент live-build для создания live системы очень хороший — настоятельно рекомендую заглянуть на офсайт и почитать о возможностях в принципе и конкретных реализациях в примерах.
Свою задачу считаю решенной, а вы дерзайте, если заинтересовались 😉

    • l13t
    • Декабрь 7th, 2012 11:38дп

    Огромное спасибо за ман.
    Очень красиво и докладно описано. Вкурил структуру и сейчас играюсь с своей флешкой блекджеком, шлюхами и partimage+скрипты самописные.

    • Максим
    • Март 1st, 2013 2:48пп

    в файле rc.local я бы добавил /sbin/route add default gw 192.168.1.1 =)

  1. Трэкбэков пока нет.

Why ask?