NullPointerException

Blog d’un groupe crypto-terroriste individuel auto-radicalisé sur l’Internet digital

Online - Installation from scratch

Online propose des serveurs assez sympas avec des prix raisonnables pour faire du self-hosting comme un grand. Problème, la procédure d’installation automatique de Debian n’est franchement pas top, surtout au niveau du partitionnement. On ne peut pas profiter d’un partitionnement full LVM, d’un /var séparé, etc. Debian et Online étant tous les deux très bien fait, on peut quand même s’en sortir en faisant tout à la main !

On est malheureusement obligé de commencer par l’installation automatique via Online, le serveur ne pouvant pas être passé en mode secours avant. On laisse donc toutes les options par défaut, et une fois fini, on passe la bestiole en mode rescue et on reboot. Après s’être connecté via SSH, on est parti pour faire une installation complète de Debian via Debootstrap.

Partitionnement

On commence par le partitionnement des disques proprement dit. La mode étant à la virtualisation, on va réserver une (grosse) partie de l’espace disponible pour de futurs conteneurs LXC.

Au cas où des volumes LVM existeraient déjà sur le système, on va désactiver tous les volumes logiques existants :

swapoff -a
vgchange -a n

Ensuite, on s’occupe de désactiver tous les volumes RAID potentiels, puis de remettre à 0 la détection automatique :

ls /dev/md[0-9]* | xargs -n 1 mdadm -S
ls /dev/sd*[0-9]* | xargs -n 1 mdadm --zero-superblock

On s’occupe ensuite des partitions proprement dites. Personnellement, je prévois une partition de 100Go pour la Debian, le reste ira aux conteneurs LXC. Comme on va avoir tout ça en RAID-1, on recopie la table des partitions du disque sda vers le disque sdb :

/sbin/parted -a optimal --script /dev/sda \
    mklabel msdos \
    mkpart primary 8M 100GB \
    mkpart primary 100GB 100% \
    toggle 1 boot
sfdisk -d /dev/sda | sfdisk /dev/sdb

On met ensuite du RAID-1 en place autour de tout ça :

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 --assume-clean /dev/sda1 /dev/sdb1
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 --assume-clean /dev/sda2 /dev/sdb2

(Généralement à ce moment-là, il faut rebooter pour faire prendre en compte les modifications…) On finit par créer les conteneurs LVM :

pvcreate /dev/md0
vgcreate debian /dev/md0
lvcreate -n root -L 10G debian
lvcreate -n boot -L 200M debian
lvcreate -n var -L 20G debian
lvcreate -n log -L 10G debian
lvcreate -n tmp -L 10G debian
lvcreate -n home -L 10G debian
lvcreate -n swap -L 1G debian
lvcreate -n srv -l 100%FREE debian

pvcreate /dev/md1
vgcreate lxc /dev/md1

Et enfin, les systèmes de fichiers :

for d in root boot var log tmp home srv; do mkfs.ext4 /dev/mapper/debian-${d} -L debian-${d}; done
	mkswap /dev/mapper/debian-swap -L debian-swap

Debootstrap

Maintenant qu’on a toutes les partitions nécessaires, on peut s’attaquer à l’installation de Debian avec Debootstrap. On commence par recréer toute l’arborescence standard du futur GNU/Linux et par y monter les bonnes partitions :

mount /dev/mapper/debian-root /mnt
mkdir -p /mnt/{boot,var,tmp,home}
mount /dev/mapper/debian-boot /mnt/boot
mount /dev/mapper/debian-var /mnt/var
mkdir -p /mnt/var/log
mount /dev/mapper/debian-log /mnt/var/log
mount /dev/mapper/debian-tmp /mnt/tmp
mount /dev/mapper/debian-home /mnt/home
mkdir -p /mnt/{proc,sys,dev}
for i in proc sys dev; do mount -o bind /$i /mnt/$i; done

Et ensuite, en avant Debootstrap !

debootstrap --arch=amd64 jessie /mnt http://http.debian.net/debian/

Configuration de Debian

Pour une raison qui m’échappe, il arrive parfois que /proc et /sys se démontent à l’issu du debootstrap. On prend donc le temps de vérifier via un mount que tout est bien présent et on fait le nécessaire si besoin (for i in proc sys dev; do mount -o bind /$i /mnt/$i). On rentre dans notre nouveau système Debian pour finir l’installation de tout ce qui est nécessaire :

chroot /mnt

On configure APT et on met à jour le système :

cat > /etc/apt/sources.list <<EOF
deb http://http.debian.net/debian/ jessie main
deb http://http.debian.net/debian/ jessie-updates main
deb http://security.debian.org/ jessie/updates main
EOF
cat >/etc/apt/apt.conf.d/60recommends <<EOF
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOF
apt update && apt -y dist-upgrade

On installe les paquets qui fournissent certains composants essentiels :

apt -y install locales
apt -y install localepurge
apt -y install busybox vim bind9 bash-completion less cron rsyslog
apt -y autoremove --purge nano

Configurer le réseau :

cat > /etc/network/interfaces.d/eth0 <<EOF
auto eth0
iface eth0 inet static
	address 62.210.X.X/24
	gateway 62.210.X.1
iface eth0 inet6 static
	address 2001:bc8:X:X::X/56
EOF

cat > /etc/resolv.conf <<EOF
search example.org
domain example.org
nameserver ::1
nameserver 62.210.16.6
nameserver 62.210.16.7
EOF

echo pony > /etc/hostname
hostname -F /etc/hostname

cat > /etc/hosts <<EOF
127.0.0.1       pony.example.org pony
127.0.0.1       localhost

::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
EOF

cat > /etc/dibbler/client.conf <<EOF
iface eth0 {
	ia pd
}
EOF
echo XX:XX:XX:XX:XX:XX:XX:XX:XX:XX > /var/lib/dibbler/client-duid

On renseigne ensuite le /etc/fstab et le RAID :

cat > /etc/fstab <<EOF
# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system>   <mount point>   <type>  <options>         <dump>  <pass>
proc              /proc           proc    defaults          0       0
sysfs             /sys            sysfs   defaults          0       0
cgroup            /sys/fs/cgroup  cgroup  defaults          0       0
/dev/debian/root  /               ext4    errors=remount-ro,noatime 1       1
/dev/debian/boot  /boot           ext4    defaults,noatime  1       2
/dev/debian/srv   /srv            ext4    defaults,noatime  1       2
/dev/debian/home  /home           ext4    defaults,noatime  1       2
/dev/debian/var   /var            ext4    defaults,noatime  1       2
/dev/debian/log   /var/log        ext4    defaults,noatime  1       2
/dev/debian/tmp   /tmp            ext4    defaults,noatime  1       2
/dev/debian/swap  none            swap    swap              0       0
EOF

mkdir -p /etc/mdadm && /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf

Enfin, les logiciels par eux-mêmes :

apt install -y postfix lvm2 mdadm openssh-server mdadm dibbler-client bind9
rm -f /var/lib/mdadm/CONF-UNCHECKED

Et on finit par le noyau et le bootloader :

apt install -y grub2 linux-image-amd64

On s’assure que tous les services qui auraient pu démarrer sont bien arrêtés :

for s in atd postfix cron bind9 ssh dibbler-client mdadm mdadm-raid rsyslog; do service ${s} stop; done
service --status-all | grep +

Nettoyage et reboot

On nettoie dernière nous, on démonte tous les disques et on reboot :

exit

umount /mnt/var/log
umount /mnt/{boot,var,home,tmp}
umount /mnt/{proc,dev,sys}
umount /mnt

vgchange -a n

reboot

Et normalement votre nouvelle machine devrait prendre vie et connaître son premier paquet IP !

Il est conseillé de rebooter en étant connecté à l’iDrac fourni par Online. Ainsi, en cas de problème de boot, on sera capable de trouver rapidement ce qui plante. Si le boot se passe mal, vous pouvez reprendre la main en rescue, remonter les disques et corriger :

mdadm --assemble --scan
vgchange -a y
mount /dev/mapper/debian-root /mnt
mount /dev/mapper/debian-boot /mnt/boot
mount /dev/mapper/debian-var /mnt/var
mount /dev/mapper/debian-log /mnt/var/log
mount /dev/mapper/debian-tmp /mnt/tmp
mount /dev/mapper/debian-home /mnt/home
for i in proc sys dev; do mount -o bind /$i /mnt/$i; done
chroot /mnt
… do stuff…
exit
umount /mnt/var/log
umount /mnt/{boot,var,home,tmp}
umount /mnt/{proc,dev,sys}
umount /mnt
vgchange -a n

Comments !