LINUX.ORG.RU

Возвращение Live Persistent Mode в Debian 7 Wheezy & Testing/Sid


2

1

Последнее время,в Debian,с переходом на очередной Stable релиз «Wheezy»,пропала возможность создавать Live-USB сборки с режимом сохранения состояния (Persistent Mode) при помощи простой распаковки содержимого дистрибутивного или кастомного образа на подготовленный раздел флешки,установки загрузчика и последующего создания в корне устройства самого файла сохранённых состояний - live-rw,отформатированного в ext3 FS или другую ext* FS по вкусу.Мне вот давеча понадобилось,вот и столкнулся с такой проблемой...Persistent просто не работал!Поиски в Гугле внятного решения не дали,так что пришлось разбираться самому и о результате этих разбирательств было решено написать этот трэд. Собственно,решение пришло после проверки содержимого пакетов live* текущего Wheezy и oldstable Squeeze, и оказалось зарыто в конфиге /usr/share/initramfs-tools/scripts/live из live-boot-initramfs-tools прежнего oldstable и ненешних «обновленных» версий для stable/testing/sid/experimental,так как в версии oldstable имеется набор прямых директив на использование конкретного файла сохраненных состояний в корне загрузочного устройства:

#!/bin/sh

# set -e

export PATH="/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin"

echo "/root/lib" >> /etc/ld.so.conf
echo "/root/usr/lib" >> /etc/ld.so.conf

mountpoint="/live/image"
alt_mountpoint="/media"
LIVE_MEDIA_PATH="live"

root_persistence="live-rw"
home_persistence="home-rw"
root_snapshot_label="live-sn"
home_snapshot_label="home-sn"

USERNAME="user"
USERFULLNAME="Live user"
HOSTNAME="host"
...

а в более новых версиях в этом конфиге лишь указание читать конфиг /lib/live/boot.sh,в котором только:

...
old_root_overlay_label="live-rw"
old_home_overlay_label="home-rw"
custom_overlay_label="persistence"
persistence_list="live-persistence.conf"
...

и это,естейственно,не работает,поскольку имеется ввиду не файл live-rw,а в лучшем случае раздел с такой меткой... Выходом из положения,здесь является даунгрейд пакета live-boot-initramfs-tools до oldstable версии или всей ветки live*,если потребуется,с предварительной заморозкой пакета udev текущей версии.Исходя из предположения,что вы делаете свою сборку LiveCD/DVD/USB на базе рабочей системы или хотя бы временно установили дистрибутивную поставку на подготовленный сборочный раздел и находитесь в целевой системе,хотя бы в CHROOT-e...:

echo "udev hold" | sudo dpkg --set-selections
и небольшой хак с удовлетворением запросов исполняемой части скрипта live из /usr/share/initramfs-tools/scripts:
wget http://ftp.ru.debian.org/debian/pool/main/u/udev/udev_164-3_i386.deb
mkdir pkg
atool -X pkg udev_164-3_i386.deb
cd pkg/lib/udev
ls
sudo rsync -var path_id usb_id input_id /lib/udev
sudo nano /usr/share/initramfs/hooks/udev
...
и приведение /usr/share/initramfs/hooks/udev к следующему виду:
...
cp /lib/udev/hotplug.functions $DESTDIR/lib/udev/
cp /lib/udev/hwdb.bin $DESTDIR/lib/udev/
cp /lib/udev/usb-db $DESTDIR/lib/udev/
cp /lib/udev/pci-db $DESTDIR/lib/udev/
for program in firmware.agent hwdb.bin usb-db pci-db ata_id edd_id scsi_id path_id usb_id input_id; do
  copy_exec /lib/udev/$program /lib/udev
done
copy_exec /sbin/blkid /sbin
...
после чего неминуемое:
sudo update-initramfs -vuk all
и замена файлов initrd.img & vmlinuz в каталоге /live на вашей флешке файлами из вашего /boot
cp -vf /boot/initrd.img-`uname -r` /media/$YOUR_USB_LABEL/live/initrd.img
cp -vf /boot/vmlinuz-`uname -r` /media/$YOUR_USB_LABEL/live/vmlinuz
и - главное,в самом загрузочном контейнере filesystem.squashfs
mv -vf /media/$YOUR_USB_LABEL/live/filesystem.squashfs
dd if=/dev/zero of=sfs.img bs=1M count=9000
mkfs.ext4 -F sfs.img
tune2fs -r 0 -m 0 -c 0 sfs.img
sudo modprobe loop
sudo mount -o rw sfs.img /mnt
sudo rm -rf /mnt/*
sudo unsquashfs -f -d /mnt *.squashfs
sudo rm -f /mnt/boot/vmlinuz* /mnt/boot/initrd.img*
sudo cp -vf /boot/initrd.img-`uname -r` /mnt/boot
sudo cp -vf /boot/vmlinuz-`uname -r` /mnt/boot
mv -vf *.squashfs fs.sfs.old
sudo mksquashfs /mnt filesystem.squashfs
mv -vf filesystem.squashfs /media/$YOUR_USB_LABEL/live
sudo umount /mnt
rm -f fs.sfs.old sfs.img
После такой перепаковки загрузочного контейнера,вы,наконец сможете запустить вашу live-usb систему с флешки в Persistent Mode с возможностью сохранения изменений. Спасибо за внимание.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.