Portál AbcLinuxu, 30. dubna 2025 12:44
Už je to trošku delší doba, co jsem potřeboval pozměnit nebo zkopírovat vypnutý Linux. Nechtěl jsem kvůli tomu instalovat dočasně jiný systém, CD médium s Live jsem neměl nebo tehdy nebyla CDROM mechanika v serveru. Tak jsem si říkal, že by bylo super nabootovat ze sítě nějakou malou distribuci do RAM. Našel jsem distro PLD. Později jsem chtěl ale další programy. Protože máme na serverech Debian, říkal jsem si, že by bylo příjemné mít RAM Debian distro s vlastní konfigurací.
Už dříve jsem zkoušel dělat distro, které nabootovalo a připojilo systém na NFS a změny provádělo přes UnionFS na NFS do vlastního adresáře. To jsem řešil vlastním jádrem s vlastním init ramdiskem, jehož příprava ale nebyla vůbec jednoduchá.
Pak jsem nějak náhodou zjistil, že Debian má dost dobrý systém pro vytváření init ramdisku (update-initramfs z balíku initramfs-tools). Lze definovat dodatečné moduly, různé dodatečné skripty a další informace pro připojení root oddílu pro start. Protože jsem aktuálně potřeboval RAM distribuci, přemýšlel jsem, jak by bylo možné takové distro vytvořit v Debianu použitím pouze ditribučních nástrojů.
Debian Etch obsahuje předkompilované moduly pro unionfs, Debian Lenny nahradil modul unionfs modulem aufs. Debian obsahuje i moduly pro squashfs.
Moje idea byla vytvořit si pomocí bootstrapu Debian systém. Z něj udělat squashfs image. Tento squashfs image pak vložit do originálního initramdisku. Při bootu pak kernelu sdělit, že rootfs je onen squashfs image. Zápis do systému pak realizovat pomocí aufs (unionfs). Jádro nastartuje, načte celý initramdisk a připojí squashfs. Ten pak pomocí skriptu přesunout do jiného adresáře a na "správný" root adresář připojit aufs se zdrojem squashfs a se zápisem do tmpfs. Originální debian initrd init skript pak provedet pivot_root s aufs a spustí /sbin/init jako normálně. A systém běží.
Vypadá to jednoduše a jednoduché to i je. Postup pro Debian Lenny je následující a je platný pro architektury i386 a amd64 (ověřeno) a možná i pro další (ikdyž s bootem si nejsem jistý).
debootstrap --arch=i386 stable /minidebian/orig
)chroot
/minidebian/orig ; update-initramfs -u -k all
.rsync -axvc -P --delete-after --delete-excluded \ -f "- /boot/***" \ -f "- /var/cache/apt/srcpkgcache.bin" \ -f "- /var/cache/apt/pkgcache.bin" \ /minidebian/orig/ /minidebian/squash/Po zkopírování vytvoříme squashfs image
cd /minidebian/squash ;
mksquashfs . /minidebian/squash.img
mkdir -p /minidebian/initrd cd /minidebian/initrd gunzip -c /minidebian/orig/boot/initrd-VERSION | cpio -iNyní zkopírovat squashfs image do initrd
cp /minidebian/squash.img
/minidebian/initrd/
. A vytvořit znovu initramfs cd
/minidebian/initrd ; find | cpio -o -H newc | gzip -cv >
/minidebian/orig/boot/initrd-VERSION
.
label minidebian kernel DIR/vmlinuz-VERSION append initrd=DIR/initrd-VERSION root=/squash.img rootfstype=squashfs rootflags=roPro GRUB by startovací volba měla vypadat asi takhle:
title Mini Debian root (hd0,0) kernel /boot/minidebian/vmlinuz-VERSION root=/squash.img rootfstype=squashfs rootflags=ro initrd /boot/minidebian/initrd-VERSION
Samozřejmě to předpokládá, že máte dostatek RAM, ale pro novější počítače by tohle neměla být žádná překážka.
Pokud zachováte funkční apt-get/aptitude a do minidebianu zakomponujete podporu sítě, můžete na nabootovaném systému instalovat další programy - omezení jste pouze velikostí paměti. Na konzolovém minidebianu jsem zkoušel nahodit Xka, fluxbox, gdm a iceweasel a šlapalo to naprosto skvěle, takže mám už rozdělaný systém s Xkama. Samozřejmě to bude opět větší, ale RAM je opravdu levná.
Skript squashfsunionfs
#!/bin/sh if [ "$1" = "prereqs" ] ; then exit 0 ;fi . /scripts/functions if grep -qE '\<verbose\>' /proc/cmdline;then verbose="y" _log_msg "VERBOSE mode activated" else verbose="" _log_msg "VERBOSE mode NOT activated" fi if ! mkdir -p -m 0700 /root-squash ; then panic "Unable to create directory /root-squash"; fi if ! mkdir -p -m 0700 /tmpfs ; then panic "Unable to create directory /tmpfs";fi if [ "$verbose" = "y" ];then echo "VERBOSE: mount -o move ${rootmnt} /root-squash";fi if mount -o move "${rootmnt}" /root-squash ; then log_success_msg "Squash Image moved to /root-squash" else log_failure_msg "Unable to move Squash Image to /root-squash" panic fi if ! mount -t tmpfs none /tmpfs ; then panic "Unable to mount tmpfs /tmpfs";fi if [ "$verbose" = "y" ];then echo "VERBOSE: mount -t aufs -o dirs=/tmpfs=rw:/root-squash=ro none /root";fi if mount -t aufs -o dirs=/tmpfs=rw:/root-squash=ro none /root;then log_success_msg "Squash Image mounted into UnionFS" else log_failure_msg "Error while mounting Squash Image into UnionFS" panic fi
Pokud budete experimentovat podle tohoto návodu a něco vám nebude fungovat, napište do dizkuze. Psal jsem to z hlavy, takže doufám, že jsem to napsal správně.
Tiskni
Sdílej:
RAM distribuce - to je aspon nazev.
Jinak moc pekny navod. Vypada ze jste zkloubil boot ze site s mini live distribuci.
Takto jsem nedavno se pokousel nabootovat Slax - na jednom PC Slax uz bezel v rezimu pxe server a druhemu pc jsem pri startu nutil boot ze site. Asi nejaka kolize mezi dhcp z routeru a dhcpd ze Slaxu a tak se nezadarilo. Ale urcite to jeste potrapim.
No, puvodne jsem tomu rikal minideb, pak jsem to prejmenoval na minietch a minilenny, to bylo ale moc dlouhy, takze ted mam uz jenom ml A tech uz nedelam, kdyz je lenny stabilni. Nicmene lennyho pro i386 mam jako upgrade z etche, protoze jsem potreboval evms. Kolega me do toho navezl, kdyz jsme delali debian etch a v lennym uz evms neni. LVM je stejne lepsi
Jinak, dekuju ze vykas, ale radsi tykej - je to takovy prirozenejsi
>>>Jinak, dekuju ze vykas, ale radsi tykej - je to takovy prirozenejsi.
Ani nevim proc nekdy vykam a nekdy tykam .... popravde receno asi o nahode. Pravda je ze tu na Abicku patrim mezi ty starsi.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.