Instalacja przez debootstrap ... :: LiveUSB :: Modyfikowanie / przebudowanie pakietu: :: Budowanie modułów dla swojego jądra :: Budowanie (zmodyfikowanego) jądra :: Konfiguracja wstępna Debiana

Poradnik linuxowy - porady konfiguracyjne Debiana

Instalacja przez debootstrap ...

Debian umożliwia także instalację systemu z działającego systemu (bez instalatora) - służy do tego celu program debootstrap (aby go zainstalować wydajemy polecenie apt-get install debootstrap), który instaluje w wskazanym katalogu (może to być katalog w którym podmontowany jest system plików z innego dysku) podstawowe pakiety dystrybucji (debootstrap wersja_dystrybucji katalog_instalacji). Po wykonaniu tego procesu należy wykonać chroot katalog_instalacji (spowoduje to zmianę katalogu głównego dla wszystkich procesów potomnych na wskazany oraz odpalenie /bin/sh pochodzącego z nowego drzewa katalogowego) oraz (już w chrootowanym środowisku) mount proc /proc -t proc. Następnie (w przypadku instalacji sieciowej) powinniśmy skonfigurować sieć wraz z DNS (jak to zrobić napisałem powyżej) i przystąpić do instalacji potrzebnych nam pakietów (w szczególności jądra i bootloadera). Po instalacji zalecam także wykonanie dpkg-reconfigure locales celem przebudowania informacji o lokalizacji systemu.

Instalacja debootstrap z wykorzystaniem MEPIS 7.0:

kernel /boot/vmlinuz aufs init=/bin/bash
  /etc/init.d/udev start
  dhclient eth0
    # lub:
    # ifconfig eth0 up 192.168.24.5 netmask 255.255.0.0
    # ip route add default via 192.168.0.1
    # echo "nameserver 192.168.0.1" > /etc/resolv.conf
  apt-get update
  . /etc/profile
  apt-get install debootstrap
  fdisk ... ; mkfs ... ; mount ... ; debootstrap ...

Możliwe problemy

Niekiedy przy instalacji debootstrapem lub w inny sposób może coś nie do końca wyjść. Możemy potem mieć doczynienia z komunikatami typu:

Zobacz w Sieci: Własna minidystrybucja, Fully Automatic Installation, linuxcreate.

LiveUSB

Live USB możmy bardzo prosto utworzyć instalując po prostu system z użyciem debootastrapa i uzupełniając go w chroocie o jądro, gruba i potrzebne nam narzędzia.

przygotowanie tablicy partycji

Zasadniczo wystarczył by zwykły MBR z partycją EFI, ale w przykładzie robiona jest hybryda MBR i GPT:

# tworzymy tablicę partycji typu gpt
parted $DEV "mklabel gpt"

# tworzy partycję która posłuży do wgrania gruba (musi mieć co najmniej 128 kiB)
# należy zaznaczyć iż nie jest to partycja /boot
# jest to surowe (bez filesystemu) miejsce na dysku gdzie zostanie wgrany fragment gruba normalnie wgrywany do MBR
parted $DEV "mkpart grub 0 2MB";

# ustawiamy dla tej partycji flagę "GRUB BIOS partition"
parted $DEV "set 1 bios_grub on";

parted $DEV "mkpart efi 2MB 200MB";
parted $DEV "set 2 boot on";

# resztę dysku możemy podzielić wg uznania w tym przykładzie robimy jedną dużą partycję o nazwie rootfs
parted $DEV "mkpart rootfs 200MB 100%";  


# przy pomocy gdisk utworzenie hybrid MBR
gdisk $DEV
# r ->
#      o
#      h ->
#           1 2 3
#           n 83 n
#           ef y
#           83 n
#      o
#      w -> 
#           y

mkfs.vfat -F 32 ${DEV}2
mkfs.xfs ${DEV}3

Instalacja systemu

# zamontowanie systemu plików z USB i debootstrap
mount ${DEV}3 ${MNT}
debootstrap stable ${MNT} ftp://ftp.icm.edu.pl/pub/Linux/debian/

# zamontowanie /proc, /sys i /dev na potrzeby chroot'a
mount -t proc  proc  $MNT/proc
mount -t sysfs sysfs $MNT/sys
mount -o rbind /dev  $MNT/dev

# chroot
chroot $MNT

Uwaga: wszystkie następne kroki wykonywane są w chroot

podstawowa konfiguracja APT

cat << EOF > /etc/apt/apt.conf.d/03misc
# nie trzyma polecanych i sugerowanych jak zalezności
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

# nie instaluje automatycznie olecanych i sugerowanych
APT::Install-Recommends "false";
APT::Install-Suggests "false";

# wyłączenie wyszukiwania przyrostowego w aptitude
aptitude::UI::Incremental-Search "false";

# wyłączenie pobierania aktualizacji listy pakietów jako pdiff
# (polecam jeżeli stosunkowo rzadko aktualizujemy listy pakietów np. na testingu)
Acquire::PDiffs "false";
EOF

apt-get install aptitude

Grub i jądro

# instalacja pakietów gruba, jądra oraz narzędzi efi
aptitude install grub2 grub-efi-amd64-bin efivar efibootmgr linux-image-amd64

# instalacja GRUBa w MBR
grub-install --root-directory=/boot/   --target=i386-pc    $DEV

# instalacja GRUBa dla UEFI
mkdir /boot/efi
mount ${DEV}2 /boot/efi
grub-install --efi-directory=/boot/efi --target=x86_64-efi
mkdir /boot/efi/EFI/BOOT
cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/BOOT/bootx64.efi

# plik konfiguracyjny GRUBa
UUID=`grub-probe -d ${MNT} -t fs_uuid`
cat << EOF > /boot/grub/grub.cfg
# korzystanie z konsoli na porcie szeregowym
#serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1
#terminal_input serial console
#terminal_output serial console
# za to na którym RS jest grub odpowiada --unit w serial
#
# korespondujące opcje uruchamiania dla Linuxa:
#   module    /boot/vmlinuz [...] console=tty0 console=ttyS1,115200n8
# korespondujące opcje uruchamiania dla XENa:
#   multiboot /boot/xen.gz  [...] com2=115200,8n1 vga=mode-0x0319 console=com2,vga
#   module    /boot/vmlinuz [...] console=tty0 console=hvc0
#
# w opcjach kernela szczególną rolę odgrywa ostatni podany terminal (ostatnia opcja console)
# jest on związany z /dev/console i na nim pokazywany jest init, ponadto należy uruchamiać getty
# na odpowiednim urządzeniu poprzez wpis w inittab np.:
#   T0:23:respawn:/sbin/getty -L /dev/ttyS1 115200 vt100
# lub (dla wariantu XENowego, UWAGA: w przykładzie tylko runlevel 4 i 5):
#   T1:45:respawn:/sbin/getty 38400 hvc0

# timeout w sekundach dla domyślnej pozycji menu
set timeout=60
set default="0"

# ładowanie modułów - typ tablicy partycji
insmod part_gpt
insmod part_msdos

# ładowanie modułów - RAID
insmod mdraid1x # mdraid metadata 1.x
insmod mdraid09 # mdraid metadata 0.9
#insmod raid5rec # faulty RAID4/5
#insmod raid6rec # faulty RAID6

# ładowanie modułów - LVM
insmod lvm

# ładowanie modułów - File System
insmod xfs

# ustawienie root'a
search --no-floppy --fs-uuid --set=root $UUID


# ustawienia wizualne
if [ x\$feature_default_font_path = xy ] ; then
    font=unicode
else
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont \$font ; then
  if [ x\$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
  insmod gfxterm
  insmod gettext
fi

set menu_color_normal=white/red
set menu_color_highlight=yellow/black
set pager=1
terminal_output gfxterm


# pozycje menu
menuentry 'Debian GNU/Linux USB-LIVE by rrp@opcode.eu.org' {
  echo    'Loading Linux 3.16.0-4-amd64 ...'
  linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=$UUID rootdelay=5 ro
  echo    'Loading initial ramdisk ...'
  initrd  /boot/initrd.img-3.16.0-4-amd64
}

menuentry 'Debian GNU/Linux USB-LIVE by rrp@opcode.eu.org init=/bin/bash' {
  echo    'Loading Linux 3.16.0-4-amd64 ...'
  linux   /boot/vmlinuz-3.16.0-4-amd64 root=UUID=$UUID rootdelay=5 ro init=/bin/bash
  echo    'Loading initial ramdisk ...'
  initrd  /boot/initrd.img-3.16.0-4-amd64
}
EOF

Instalacja przydatnych narzędzi i programów

SYSBASE=" tmux vim-nox less apcalc bc python gawk gpm busybox
          coreutils bsdutils bsdmainutils diffutils findutils grep sed tar util-linux gzip
          bash-completion manpages file konwert whiptail bzip2 p7zip p7zip-full p7zip-rar"
SYSTOOL=" lsof procps psmisc sudo locales sysstat iotop itop htop debootstrap picocom cutecom"
HWTOOL="  parted gdisk gnu-fdisk mdadm lvm2 dmsetup multipath-tools xfsprogs"
HWDIAG="  pciutils usbutils lsscsi dmidecode sdparm smartmontools hddtemp hdparm ipmitool lm-sensors pcmciautils"

NETBASE=" isc-dhcp-client resolvconf net-tools bridge-utils vlan iproute ethtool iputils-ping iputils-tracepath
          tcptraceroute mtr-tiny telnet netcat netcat6 netcat-traditional socat picocom nmap tcpflow"
NETTTOL=" wget curl w3m w3m-img links2 rsync ntpdate bind9-host ssh sshfs"
NETDIAG=" arping arp-scan ndisc6 ipv6toolkit inetutils-traceroute paris-traceroute
          netdiag vnstat iftop sipcalc tcpdump ngrep dnstop dnstracer dnsutils dnswalk"
NETWIFI=" wireless-tools wpasupplicant rfkill"

XTOOL="   xorg openbox iceweasel xpdf"

aptitude install $SYSBASE $SYSTOOL $HWTOOL $HWDIAG $NETBASE $NETTTOL $NETDIAG $NETWIFI $XTOOL
aptitude clean

Konfiguracja

# w /etc/fstab ustawiamy rootfs na read-only, a /tmp na tmpfs
# /var/run i /var/lock są współcześnie linkami do /run na tmpfs
cat << EOF > /etc/fstab
/dev/disk/by-uuid/$UUID  /     xfs    ro        0  0
tmpfs                    /tmp  tmpfs  defaults  0  0
EOF

# linkujemy /proc/mounts do /etc/mtab
ln -s /proc/mounts /etc/mtab

# automatyczne podnoszenie sieci
echo "allow-hotplug eth0" > /mnt/1/etc/network/interfaces.d/eth0 
echo "iface eth0 inet dhcp" > /mnt/1/etc/network/interfaces.d/eth0

# ssh pozwala na logowanie na root'a i nie jest automatycznie uruchamine
sed -e 's|^[# ]*PermitRootLogin.*$|PermitRootLogin yes|' -i /etc/ssh/sshd_config
systemctl  disable  ssh.service

# konfiguracja do rootfs w ro itp
systemctl  mask  hwclock-save.service systemd-random-seed.service systemd-update-utmp-runlevel.service systemd-update-utmp.service udev-finish.service
ln -s /tmp/Xorg.0.log /var/log/Xorg.0.log
rm /usr/lib/modules-load.d/ipmievd.conf

# konfiguracja użytkownika
cat << EOF > /root/prepareChroot.sh
#!/bin/bash

if [ \$# -ne 2 ]; then
        echo USAGE: \$0 device mountpoint
        exit
fi

DEV=\$1
MNT=\$2

mount \$DEV \$MNT
mount -t proc  proc  \$MNT/proc
mount -t sysfs sysfs \$MNT/sys
mount -o rbind /dev  \$MNT/dev

chroot \$MNT
EOF
chmod +x /root/prepareChroot.sh

cat << EOF > /root/.bash_history
mount -o remount,rw /
systemctl start ssh.service
/root/prepareChroot.sh /dev/sdb1 /mnt/1
chroot /mnt/1
EOF
ln -s /root/.bash_history /.bash_history

Modyfikowanie / przebudowanie pakietu:

Aby zbudować jakis pakiet ("pakiet_do_poprawki") należy pobrać jego wersję źródłową (apt-get source pam), nanieść poprawki (albo na kod źródłowy albo tylko na opcje budowania umieszczone w "rules") a następnie zbudować pakiet binarny (dpkg-buildpackage -rfakeroot) i zainstalować go lub wypakować z niego potrzebne pliki. W przypadku pakietów budowanych na nasze potrzeby pomocny może być też program "debchange", umożliwiający automatyzację zmian w changelog - np. debchange -v "1.0."`date +"%Y%m%dT%H%M%S"` "OPIS" && dpkg-buildpackage -rfakeroot

Budowanie modułów dla swojego jądra

Często nie ma paczek z zbudowanymi modułami dla używanej przez nas wersji jądra, niekiedy takich modułów nie ma w ogóle. Należy wtedy zainstalować pakiet XXXX-source (np. shfs-source, o którym poniżej), w katalogu /usr/src/ pojawi się plik z spakowanymi źródłami danego modułu. Należy po przejściu do wspomnianego katalogu rozpakować źródła (najczęściej: tar -xjf xxxx.tar.bz2 lub tar -xzf xxxx.tar.gz). Następnie przejść do katalogu z nagłówkami odpowiedniego jądra (musi być zainstalowany odpowiedni pakiet linux-headers-YYYYZZZZ, gdzie YYYY wersja jadra, a ZZZZ to określenie wersji pakietu jądra - np: -1-686-smp) - /usr/src/linux-headers-YYYYZZZZ. I tam wykonać: make-kpkg --rootcmd=fakeroot --append-to-version=ZZZZ modules-image. Po wykonaniu tego polecenia wracamy do /usr/src/ i tam czekają na nas gotowe do zainstalowania (np. przez dpkg -i) pakiety Debiana (*.deb).

Budowanie (zmodyfikowanego) jądra

Niekiedy zachodzi potrzeba zbudowania zmodyfikowanego (pod względem konfigu lub z nałożonymi łatami) jądra. Poniżej przedstawię drogę do zbudowania jądra 2.6.24.4 z nałożonymi łatami IMQ oraz wybranymi z łat patch-o-matic. Jądro będzie budowane metodą Debiana, a poniższy opis należy traktować jako przykład który należy dostosować do własnych potrzeb.

####################
###  POBIERANIE  ###
####################
export KERNEL_DIR="$PWD/2.6.24"
export IPTABLES_DIR="$PWD/iptables-1.4.0"

wget http://www.linuximq.net/patchs/iptables-1.4.0-imq.diff
mv iptables-1.4.0-imq.diff iptables-imq.diff
wget http://www.linuximq.net/patchs/linux-2.6.24-imq.diff
mv linux-2.6.24-imq.diff linux-imq.diff
wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080405.tar.bz2
tar -xjf patch-o-matic-ng-20080405.tar.bz2
mv patch-o-matic-ng-20080405 patch-o-matic-ng

apt-get source iptables
wget ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.6/linux-2.6.24.4.tar.gz
tar -xzf linux-2.6.24.4.tar.gz
mv linux-2.6.24.4 2.6.24
cp /boot/config-2.6.24-1-686 $KERNEL_DIR/.config

#############
###  IMQ  ###
#############
patch -p0 < linux-imq.diff
patch -p0 < iptables-imq.diff

#######################
###  patch-o-matic  ###
#######################
pushd patch-o-matic-ng;
./runme pending

## base ##
# dopasowywanie u32; od 2.6.23 w jajku
#./runme u32
# grupy adresów obsługiwane programem ipset
./runme set

## extra ##
# ustawianie trasy routibgu z poziomu iptables
./runme ROUTE

## external ##
./runme --download
# masowe markowanie
./runme IPMARK
# reguły filtrowania true/false sterowanego przec /proc
./runme condition
# limity połączeń; od 2.6.23 w jajku
#./runme connlimit
# filtrowanie po czasie
./runme time
popd

############################
###  budowanie iptables  ###
############################
pushd $IPTABLES_DIR
chmod +x $IPTABLES_DIR/extensions/.IMQ-test*
debchange -l "imq" "IMQ"
dpkg-buildpackage -rfakeroot
popd

#########################
###  budowanie jądra  ###
#########################
pushd $KERNEL_DIR
make oldconfig;
vi .config
make-kpkg oldconfig
make-kpkg clean
fakeroot make-kpkg --revision imq1 --initrd kernel_image

Altenatyną drogą (bardziej szczegułowo opisywaną na debianowym wiki) byłoby:

apt-get source linux-2.6_3.2.6-1
dpkg-source -x linux-2.6_3.2.6-1.dsc
cd linux-2.6-3.2.6
fakeroot make -f debian/rules.gen setup_amd64_none
# pachte zmiany konfigu (w debian/build/...)
# ewntualne zmiany w makefile (cel binary-arch_amd64_none) aby budować tylko tą paczkę co potrzebujemy
fakeroot make -f debian/rules.gen binary-arch_amd64_none
# jeżeli chemy tylko debugować jakiś moduł to możemy komędę tę przerwać w okolicy:
#  env -u ABINAME -u ABINAME_PART -u ARCH -u FEATURESET -u FLAVOUR -u VERSION -u LOCALVERSION DISTRIBUTION_OFFICIAL_BUILD=1 DISTRIBUTION_UPLOADER=ben@decadent.org.uk DISTRIBUTION_VERSION="3.2.6-1" make -C 'debian/build/build_amd64_none_amd64
# wykonać ta komendę manualnie i budować moduły z użyciem normalnego make /katalog/modul.ko

Konfiguracja wstępna Debiana

Na świeżo zainstalowanym systemi Debiana warto dodać pakiety: gawk, less, psmisc, vim, vim-scripts, bc, iproute, openssh-client, openssh-server. Usunąć można natomiast vim-tiny i mawk Konieczne może się także okazać ustawienie właściwej strefy czasowej (konfiguracja pakietu tzdata), locale itp. Jeżeli zamierzamy korzystać z LVM oraz RAID potrzebne są także pakiety: mdadm, lvm2.

Osobiście polecam np. następujący zestaw komend: aptitude --without-recommends install atop bind9-host bridge-utils busybox bzip2 dnsutils ebtables file gawk grub hdparm htop iftop iotop ipmitool iputils-tracepath itop less mailx netcat netcat6 nfs-kernel-server ntpdate nullmailer openssh-client openssh-server openssl paris-traceroute perl psmisc psutils python rssh rsync screen sdparm sudo sysstat tcptraceroute traceroute-nanog udev unrar-free unzip vim vnstat w3m locales ethtool linux-image-2.6-XXXXX dmsetup debootstrap ebtables hddtemp lm-sensors lvm2 mdadm openipmi smartmontools arptables && dpkg-reconfigure locales



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/usage_and_config/operating_systems_config/linux/debian) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2016-01-11 17:45:59 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).