Portál AbcLinuxu, 30. dubna 2025 12:44

(Mini-)Debian v RAM

20.9.2009 17:43 | Přečteno: 2244× | Linux | Výběrový blog

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ý).

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ě.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

otasomil avatar 20.9.2009 19:22 otasomil | skóre: 39 | blog: puppylinux
Rozbalit Rozbalit vše Re: (Mini-)Debian v RAM
Odpovědět | Sbalit | Link | Blokovat | Admin

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.

K čemu hudba, která nevede k extázi... Stop MDMA !!! I spam umí být roztomilý
20.9.2009 20:36 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: (Mini-)Debian v RAM

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:-)

otasomil avatar 21.9.2009 04:28 otasomil | skóre: 39 | blog: puppylinux
Rozbalit Rozbalit vše Re: (Mini-)Debian v RAM

>>>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.

K čemu hudba, která nevede k extázi... Stop MDMA !!! I spam umí být roztomilý

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.