Do budowania pakietów, czy do używania ściśle związanych z dystrybucją narzędzi, nie potrzeba używać wirtualizacji, która wymaga dużej ilości pamięci oraz czasu procesora. Systemy Uniksowe są niezwykle elastyczne, w porównaniu do systemów z rodziny Windows, możliwe jest bowiem wejście do systemu i wykonywanie operacji naprawczych oraz diagnostycznych bez potrzeby uruchamiania go – wystarczy do tego jedynie uruchomiony system działający na tym samym jądrze.

Poprzez dowolny system oparty o jądro Linux możliwe jest zainstalowanie drugiego systemu opartego o jądro Linuksa bez potrzeby uruchamiania go – można tego dokonać poprzez zmianę katalogu głównego, tak zwany chroot.

Archbootstrap to niewielki skrypt napisany przez użytkownika tokland, który umieścił do niego odnośnik na wiki.archlinux.org. Przy jego pomocy możliwe jest pobranie minimalnej wersji dystrybucji ArchLinux, gotowej do uruchomienia natychmiast, po ukończeniu pobierania.

W zależności od przeznaczenia instalowanego systemu umieścić można go gdziekolwiek, w katalogu w głębi systemu, w katalogu domowym, czy na specjalnie przygotowanej partycji.

Aby rozpocząć instalowanie bazowego minimalnego systemu należy wykonać polecenia:

mkdir -p /media/Disk/OS/ArchLinux # Katalog może oczywiście być dowolny
cd /media/Disk/OS
wget http://tokland.googlecode.com/svn/trunk/archlinux/arch-bootstrap.sh -O /tmp/arch-bootstrap.sh
bash /tmp/arch-bootstrap.sh /media/Disk/OS/ArchLinux # Pobranie i zainstalowanie systemu

W razie potrzeby wyboru innej architektury sprzętowej, czy serwera lustrzanego należy odpowiednio skorzystać z tego polecenia:
bash /tmp/arch-bootstrap.sh /media/Disk/OS/ArchLinux x86_64 "ftp://ftp.archlinux.org"

Jeżeli w trakcie procesu instalacji nie wystąpił żaden błąd, oznacza to, że system został poprawnie zainstalowany. Jednak, aby wejść do niego, należy najpierw zamontować odpowiednie systemy plików, bez których nie będzie on w stanie poprawnie funkcjonować.

mount -t proc none /media/Disk/OS/ArchLinux/proc # pliki systemowe
mount -o bind /dev /media/Disk/OS/ArchLinux/dev # urządzenia
mount -o bind /sys /media/Disk/OS/ArchLinux/sys # pliki systemowe
mount -o bind /dev/tty /media/Disk/OS/ArchLinux/dev/tty # dostęp do konsol fizycznych
cp /etc/resolv.conf /media/Disk/OS/ArchLinux/etc/resolv.conf # ustawienia DNS

Po zamontowaniu wszystkich wymaganych systemów plików, wykonujemy polecenie:
chroot /media/Disk/OS/ArchLinux/
które umożliwi nam zalogowanie się do systemu.

UWAGA: Należy zauważyć, że system nie jest zwirtualizowany. Istnieje bezpośredni dostęp do urządzeń oraz procesów systemu gospodarza. Możliwe jest przykładowo zabicie aplikacji po stronie hosta. Nie należy stawiać podzespołu graficznego X, ani restartować usług wewnątrz systemu “gościa”.

Jeżeli system ma zostać uruchomiony przy starcie komputera należy zainstalować jądro systemu przy pomocy menadżera pakietów:
pacman -S kernel26

Do poprawnego uruchomienia systemu przy starcie komputera, wymagany będzie także wpis do menadżera startu komputera (ang. bootloader), w GRUB 0.97 potrzebna będzie edycja pliku /boot/grub/menu.lst do którego należy dodać wpis:


title Arch Linux
root (hd0,2)
kernel /ścieżka/do/kernela root=/dev/sda3 ro
initrd /miejsce/instalacji/archlinux/boot/initrd.gz

root – miejsce w którym znajduje się jądro systemu Linux oraz obraz startowy initrd/initramfs, hd0 oznacza pierwszy dysk twardy, dwójka oznacza trzecią partycję znajdująca się na nim
kernel – lokalizacja jądra systemu na partycji podanej wcześniej, dodatkowo parametry z których najważniejszy jest root bowiem jego wartość oznacza lokalizację systemu (rootfs – “/”)
initrd – nie zawsze wymagane, najczęściej znajduje się obok pliku z jądrem systemu

Proszę mieć na uwadzę, że system jest bardzo okrojony – nie posiada domyślnie OpenSSH, binutils, sed oraz wielu podstawowych narzędzi systemowych – dobrym pomysłem byłoby zainstalowanie ich z poziomu drugiego systemu operacyjnego przed uruchomieniem systemu na fizycznej maszynie.

  • Pingback: Posix, GNU, Linux, BSD, Unix, Open Source… | x69.passnet.pl()

  • Hadgr

    Nie kumam…. po co to?

    • Jest to metoda instalacji systemu operacyjnego bez potrzeby używania specjalnie do tego przygotowanej płyty livecd.

      Możesz dzięki temu zainstalować system na serwerze gdzie nie masz dostępu do napędu CD/DVD.

      Ja zainstalowałem w ten sposób ArchLinux na serwerze wewnątrz Debiana aby korzystać z jego narzędzi do tworzenia paczek – tworzę własne repozytorium z paczkami dla różnych dystrybucji w tym i dla ArchLinux.

  • Barthalion

    Dalej nie widzę większego sensu, bo dokładnie ten sam efekt uzyska się kompilując/instalując pacmana w systemie i użycie go z kilkoma przełącznikami.

    • O wiele łatwiej jest użyć gotowego skryptu który jest niezależny od używanej dystrybucji – bowiem nie wymaga on instalowania żadnych paczek których może nie być w repozytorium aktualnie używanego systemu operacyjnego.

  • 43gdfgdfg

    Ja instalowałem raz archa przez chroota i sie zawiodłem, poźniej miałem różne problemy i błędy. Polecam instalować na świeżo.

    • Ja tam używam tylko tego Archa do tworzenia paczek do repozytorium :-)

  • rootoor

    Dzień dobry.

    Podsumowując, w Twoim konkretnym przypadku wpis do: /boot/grub/menu.lst powinien wyglądać ?

    title Arch Linux

    root (hd0,2)

    kernel /OS/ArchLinux/boot/kernel-XxXx root=/dev/sda3 ro

    initrd /OS/ArchLinux/boot/initrd.gz

    czyli sda3 miałeś zamontowane /media/Disk ??

    • Akurat w tym konkretnym przypadku nie jest możliwe uruchomienie systemu ponieważ system musi znajdować się w głównym katalogu partycji.

      Proszę przenieść ArchLinux do głównego katalogu wybranej partycji i podać w GRUB jej lokalizację oraz lokalizację kernela.

      Widzę, że /dev/sda3 nie zostało zmienione – jąðro systemu może nie odnaleźć przez to systemu plików i pokazać "kernel panic".

      Tak samo bez zmiany "root (hd0,2)" z domyślnej wartości GRUB nie będzie w stanie zlokalizować jądra systemu.

  • rootoor

    Dzieńdobry …

    faktycznie, teoretycznie gdyby to było możliwe powinno być ?

    title Arch Linux

    root (hd0,2)

    kernel /OS/ArchLinux/boot/kernel-XxXx root=/dev/sda3/OS/ArchLinux ro

    initrd /OS/ArchLinux/boot/initrd.gz

    a GRUB poradzi sobie z odszukaniem kernela, no bo wskazuje mu go:

    […]

    kernel /ścieżka/do/kernela

    […]

    Marzy mi się możliwość umieszczenia paru dystrybucji na jednej partycji i przy starcie wybór jednej z nich. Dotychczas realizuje to wersjami LiveCD.

    A Twój artykuł trochę wprowadził mnie w błąd. Przeczuwam że, ingerując w initrd.gz było by możliwe startowanie z dowolnego podkatalogu katalogu głównego.

    Może kolejny artykuł ???

    Pozdrawiam…

    • Jądro Linux nie wystartuje z miejsca zagnieżdżonego wewnątrz partycji.

  • :)

    Ciekawy artykuł. Właśnie podobną akcję zrobiłem ale z Fedorą. Odpaliłem sobie ją w Mincie.

    Szkoda tylko, że autor artykułu sprzedał się Microsoftowi :(

    • Co masz namyśli, że sprzedał się MS? Nie rozumiem Ciebie zbytnio :/ Damian siedzi od ponad 3 lat na Linuksie, więc w jaki sposób ma być fanem firmy z Redmond :P

    • Greg

      No ja też siedzę na Linuksie i co z tego? Ale jak zlukałem własnie to koleś pisze na DP. A to jest PRO Windows i Micro%oft. Źle to wygląda i pozostaje u mnie nie smak. A autor zapowiadał się ciekawie.

  • sergio

    U mnie wyskoczył błąd<code>bash /tmp/arch-bootstrap.sh /media/ArchLinux

    — using core repository: http://mirrors.kernel.org/archlinux/core/os/i686
    — create package directory: arch-bootstrap

    — packages HTML index: arch-bootstrap/core_os_i686-index.html

    — create destination directory: /media/ArchLinux

    — pacman package and dependencies: acl attr bzip2 expat glibc libarchive libfetch openssl pacman pacman-mirrorlist xz zlib

    — uncompress package: arch-bootstrap/acl-2.2.51-1-i686.pkg.tar.xz

    — uncompress package: arch-bootstrap/attr-2.4.46-1-i686.pkg.tar.xz

    — uncompress package: arch-bootstrap/bzip2-1.0.6-1-i686.pkg.tar.xz

    — uncompress package: arch-bootstrap/expat-2.0.1-6-i686.pkg.tar.xz

    — uncompress package: arch-bootstrap/glibc-2.14-4-i686.pkg.tar.xz

    — uncompress package: arch-bootstrap/libarchive-2.8.4-2-i686.pkg.tar.gz

    — uncompress package: arch-bootstrap/libfetch-2.33-3-i686.pkg.tar.gz

    — uncompress package: arch-bootstrap/openssl-1.0.0.d-1-i686.pkg.tar.gz

    — uncompress package: arch-bootstrap/pacman-3.5.3-1-i686.pkg.tar.gz

    — uncompress package: arch-bootstrap/pacman-mirrorlist-20110703-1-any.pkg.tar.gz

    — uncompress package: arch-bootstrap/xz-5.0.3-1-i686.pkg.tar.gz

    — uncompress package: arch-bootstrap/zlib-1.2.5-3-i686.pkg.tar.xz

    — configure DNS and pacman

    — re-install basic packages and install extra packages: filesystem coreutils bash grep awk file tar

    :: Synchronizowanie baz danych z pakietami…

    błąd: wersja bazy danych local jest za stara

    błąd: nie udało się zainicjować transakcji (niepoprawna wersja bazy danych)

    spróbuj uruchomić pacman-db-upgrade

    błąd: tranzakcja została już zainicjowana

    </code> Da się jakoś coś z tym zrobić jeszcze?

    • Wejdź do środowiska chroot i wykonaj:

      pacman-db-upgrade

      pacman -Sy filesystem coreutils bash grep awk file tar

      Mam nadzieję, że pomoże.

  • Greg

    @Damian, więcej artykułów poprosimy! :)

  • sergio

    To nie pomagało. Ale ten problem juz rozwiązałem. A da się w taki sposób zainstalować Archlinux na innej partycji , ponieważ mam dwie wolne partycje. Na sda1 chciałbym miec archLinux , a na sda2 katalog home do niego. Bo ten sposób co podałeś to instaluje system na tej samej partycji w katalogu media.

    Co do pacman -S kernel26 to po zainstalowaniu nadal pokazuje kernel tej dystrybucji z której instaluje. A nie chce pobierać obraz iso core. Bo tam nadal kernel 26.33. Ja chciałbym już aktualne pakiety systemu pobierac.

    • @10 sierpnia 2011, 11:06 | sergio

      Bo uname w chroocie zawsze będzie pokazywać kernel hosta. Chroot jak sama nazwa mówi to tylko zmiana katalogu głównego w środowisku w którym pracujesz (aktualna konsola) tak więc to co uruchamiasz wewnątrz takiego systemu jest pomiędzy procesami na normalnym systemie który jest "hostem".

      Myślę, że łatwiej będzie zainstalować system z CD na fizycznej maszynie skoro trudno Ci jest to wykonać w środowisku chroot.