создание hybrid Debian live-iso/usb


Разработчики Debian очень упростили создание live usb iso.

Если вы хотите создать кастомный live образ и, возможно, стать последователем Попова с его легендарной BolgenOS, то я расскажу как это сделать на примере Debian.

  1. Для начала установим в свою систему все необходимые пакеты для сборки live дистрибутива.

    sudo apt-get install xorriso live-build syslinux squashfs-tools
    
  2. Создадим базовый слепок системы в пустую директорию с помощью multistrap. Об этом более подробно написано в предыдущей статье. Могу добавить, что лучше поместить его в оперативную память для быстрой сборки-пересборки. Предположим, что директория, где будет распологаться образ системы называется /tmp/linram/root

    sudo mount -t tmpfs /dev/shm /tmp/linram/root
    
  3. Зачрутимся в */tmp/linram/root *и внесем необходимые изменения. Без них мы не сможем корректно загрузиться.

    sudo chroot /tmp/linram/root
    export HOME=/root
    export LC_ALL=C
    passwd
    # следующая команда необязательна, если вы использовали debootstrap
    echo 'deb http://ftp.ru.debian.org/debian/ stable main non-free contrib' > /etc/apt/sources.list
    echo 'nameserver 8.8.8.8' > /etc/resolv.conf
    apt-get update
    apt-get install dialog dbus
    dbus-uuidgen > /var/lib/dbus/machine-id
    apt-get install linux-image-amd64 live-boot
    apt-get clean
    rm /var/lib/dbus/machine-id && rm -rf /tmp/*
    umount -l /dev
    umount /proc
    
  4. Подготовим директорию для ядра и файлов syslinux

    mkdir -p /tmp/linram/debian/{live,isolinux}
    cp /tmp/linram/root/boot/vmlinuz*  /tmp/linram/debian/live/vmlinuz
    cp /tmp/linram/root/boot/initrd*  /tmp/linram/debian/live/initrd
    cp /usr/lib/syslinux/isolinux.bin  /tmp/linram/debian/isolinux/
    cp /usr/lib/syslinux/menu.c32  /tmp/linram/debian/isolinux/
    
  5. Создадим конфиг isolinux. В нем пропишем пункты меню загрузки.

    cat /tmp/linram/debian/isolinux/isolinux.cfg
    
    ui menu.c32
    prompt 0
    menu title Boot Menu
    timeout 300
    
    label live-amd64
        menu label ^Live (amd64)
        menu default
        linux /live/vmlinuz
        append initrd=/live/initrd boot=live persistence
    
    label live-amd64-failsafe
        menu label ^Live (amd64 failsafe)
        linux /live/vmlinuz
        append initrd=/live/initrd boot=live persistence config memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal
    
  6. Сделаем сжатый файл ФС squashfs, в котором будет располагаться корень live системы

    mksquashfs /tmp/linram/root /tmp/linram/debian/live/filesystem.squashfs \
    -b 1048576 -comp xz -Xbcj x86 -e boot
    

    Я специально выбрал размер блока в 1МБ (1048576), алгоритм сжатия xz и оптимизацию x86 для большего сжатия.

  7. Наконец создадим гибридный iso файл, который можно записать на CD или USB.

    cd /tmp/linram
    xorriso -as mkisofs -r -J -joliet-long -l -cache-inodes
    -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin -partition_offset 16
    -A "Debian Live"  -b isolinux/isolinux.bin -c
    isolinux/boot.cat -no-emul-boot -boot-load-size 4
    -boot-info-table -o debian-live.iso debian
    
  8. Можно опробовать созданный образ в виртуальной машине перед записью на флэшку/диск

    kvm -m 512 -hda /tmp/linram/debian-live.iso
    
  9. Запишем на флэшку

    sudo dd if=/tmp/linram/debian-live.iso of=/dev/your-usb bs=1M
    

Можете скачать образ, созданный для примера (111МБ), чтоб посмотреть на него в действии. В нем не установлено графическое окружение рабочего стола. http://yadi.sk/d/sYxzu1_WJ5mVm

Если на флэшке еще осталось свободное место, то можно создать на ней новый раздел с файловой системой:

sudo fdisk /dev/your-usb

Command (m for help): p

Disk /dev/your-usb: 8032 MB, 8032092160 bytes
64 heads, 32 sectors/track, 7660 cylinders, total 15687680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7e873c3a

   Device Boot      Start         End      Blocks   Id  System
/dev/your-usb1   *          64      227327      113632   17  Hidden HPFS/NTFS

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2):
Using default value 2
First sector (227328-15687679, default 227328):
Using default value 227328
Last sector, +sectors or +size{K,M,G} (227328-15687679, default 15687679):
Using default value 15687679

Command (m for help): p

Disk /dev/your-usb: 8032 MB, 8032092160 bytes
64 heads, 32 sectors/track, 7660 cylinders, total 15687680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7e873c3a

   Device Boot      Start         End      Blocks   Id  System
/dev/your-usb1   *          64      227327      113632   17  Hidden HPFS/NTFS
/dev/your-usb2          227328    15687679     7730176   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

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

sudo mkfs.ntfs /dev/your-usb2

На основе http://l3net.wordpress.com/2013/09/21/how-to-build-a-debian-livecd/

comments powered by Disqus