Archlinux arm Cubieboard

Archlinux arm cubieboard2
http://adam-dej.github.io/misc/2015/07/10/olinuxino-btrfs-root-hdd.html

Préparation du support d’installation

su mode
Mettre à zéro le début de la carte SD:

dd if=/dev/zero of=/dev/sdd bs=1M count=8

Maintenant, nous allons diviser la carte en créant deux partitions, une pour l’ensemble du système d’installation, et une pour la nouvelle partition /boot.
Démarrez fdisk et créez la partition primaire numéro 1 qui démarre du secteur 1044480. Accepter la fin par défaut.
Créez maintenant la partition primaire numéro 2 commençant sur le secteur 2048 et se terminant sur 1044479. Ceci créera une partition de 500M.

U-boot regarde la première partition et cherche /boot/zImage. Pour l’instant, nous voulons que notre partition d’installation soit la première, afin que notre support d’installation démarre. Plus tard, lorsque le système sera installé, nous échangerons ces partitions et notre nouveau système démarrera.

Après le fdisk, la carte devrait ressembler à ceci:

Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sdd1             1024000 15564799 14540800     7G 83 Linux
/dev/sdd2                2048  1023999  1021952   499M 83 Linux

Formater et monter la partition d’installation:

mkfs.ext4 /dev/sdd1
mkdir -p /mnt/tmp
mount /dev/sdd1 /mnt/tmp

Télécharger et extraire l’image Arch Linux ARM sur la partition d’installation:

wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz
bsdtar -xpf ArchLinuxARM-armv7-latest.tar.gz -C /mnt/tmp
sync

Télécharger et installer le bootloader sur la SDcard:

wget http://os.archlinuxarm.org/os/sunxi/boot/cubieboard2/u-boot-sunxi-with-spl.bin
dd if=u-boot-sunxi-with-spl.bin of=/dev/sdd bs=1024 seek=8
wget http://os.archlinuxarm.org/os/sunxi/boot/cubieboard2/boot.scr -O /mnt/tmp/boot/boot.scr
umount /mnt/tmp
sync

Insérer maintenant la carte dans votre Cubieboard2

Avec le SSD connecté sur lequel vous installerez Arch et démarrer.
Lorsque le boot est terminé, connectez-vous au système d’installation (root pw est root (changer!).

pacman -Syu arch-install-scripts

Mettre à zéro le début du disqu SDD:

dd if=/dev/zero of=/dev/sda bs=1M count=8

Créer les partitions sur le SSD avec fdisk

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1            2048 121636863 121634816   58G 83 Linux
/dev/sda2       121636864 125043310   3406447  1.6G 82 Linux swap / Solaris

Créer les fichiers systèmes boot, root et swap

mkfs.ext2 /dev/mmcblk0p2  # boot
mkfs.ext4 /dev/sda1       # root
mkswap /dev/sda2          # swap

Les monter

mount /dev/sda1 /mnt
mkdir /mnt/boot
mount /dev/mmcblk0p2 /mnt/boot
swapon /dev/sda2

Installation des bases

export LANG=C
pacstrap /mnt base base-devel

Note: La commande ci-dessus n’installera pas le noyau lui-même. Nous l’installerons plus tard.

Générer le fichier /etc/fstab qui liste les partitions présentes

genfstab -p /mnt >> /mnt/etc/fstab

Actuellement, notre partition /boot est mmcblk0p2. Nous allons le changer plus tard en mmcblk0p1, alors disons-le à fstab.
Modifier la ligne contenant mmcblk0p2 (nano /mnt/etc/fstab) en:

/dev/mmcblk0p1          /boot       ext2        rw,relatime 0 2

Passage en chroot

Chroot au système nouvellement créé pour encore plus de configuration:

arch-chroot /mnt

hostname et fuseau horaire Paris

echo 'cubiearch' > /etc/hostname
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

Clavier en mode texte

nano /etc/vconsole.conf

Ajouter

KEYMAP=fr-latin9
FONT=lat9w-16

Localisation

nano /etc/locale.conf

Ajouter

LANG=fr_FR.UTF-8
LC_COLLATE=C

Il faut supprimer le # au début de la ligne fr_FR.UTF-8 UTF-8 dans le fichier /etc/locale.gen

nano /etc/locale.gen

puis exécuter:

locale-gen

spécifier la locale pour la session courante

export LANG=fr_FR.UTF-8

on a une machine en mono-démarrage sur Archlinux, et on peut demander à ce que l’heure appliquée soit UTC

hwclock --systohc --utc

Installer le noyau (kernel)

pacman -S linux-armv7

Définissez le mot de passe root en utilisant passwd. Cela devrait suffire, mais ne redémarrez pas encore votre système!

passwd root

Je me connecte à Cubieboard2 en utilisant ssh, donc le réseau doit être en place et sshd doit s’exécuter dans la nouvelle installation.

pacman -S openssh
systemctl enable sshd

Adaptateur filaire avec DHCP

/etc/systemd/network/dhcp-wired.network
[Match]
Name=eth0

[Network]
DHCP=ipv4

Par défaut, le nom d’hôte reçu du serveur DHCP sera utilisé comme nom d’hôte transitoire.
Pour éviter , ajouter UseHostname=false dans la section [DHCPv4]

[DHCPv4]
UseHostname=false

Adaptateur filaire utilisant une adresse IP statique

/etc/systemd/network/static-wired.network
[Match]
Name=enp1s0

[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
#DNS=8.8.8.8

Si vous ne voulez pas configurer un DNS dans /etc/resolv.conf et que vous voulez vous fier à DHCP pour le configurer, vous devez activer systemd-resolved.service et le lien entre /run/systemd/resolve/resolv.conf et /etc/resolv.conf.

systemctl enable systemd-resolved
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Les utilisateurs accédant à une partition système via /usr/bin/arch-chroot à partir de scripts d’installation d’arc arch-install-scripts, devront créer le lien symbolique en dehors du chroot, sur la partition montée. Ceci est dû au fait que l’arch-chroot relie le fichier à l’environnement live.

Activer systemd-networkd.service sur votre conteneur.

systemctl enable systemd-networkd

Si Configuration DHCP utilisée : Activer le service dhcpcd

systemctl enable dhcpcd

Pendant que vous êtes encore dans l’Arch chroot, installer un bootloader:

pacman -S uboot-cubieboard2

Il vous demande si vous voulez montrer un nouveau chargeur de démarrage. Laissez-le faire.

Installer les outils u-boot pour la configuration finale du bootloader

pacman -S uboot-tools

Par défaut u-boot installé par le paquet ci-dessus cherche le noyau et tout le reste dans /boot.
Comme nous avons une partition de démarrage séparée pour u-boot, il apparaît comme si le noyau était dans /.
Alors modifions boot.txt pour qu’il le cherche là. Faire une sauvegarde du boot.txt en boot.txt.bak
C’est essentiellement une copie du script existant, mais avec /boot supprimé.

nano /boot/boot.txt
# After modifying, run ./mkscr

if test -n ${distro_bootpart}; then setenv bootpart ${distro_bootpart}; else setenv bootpart 1; fi
part uuid ${devtype} ${devnum}:${bootpart} uuid

setenv bootargs console=${console} root=/dev/sda1 rw rootwait

if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /zImage; then
  if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; then
    if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /initramfs-linux.img; then
      bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
    else
      bootz ${kernel_addr_r} - ${fdt_addr_r};
    fi;
  fi;
fi

Ensuite, exécuter mkscr pour faire un script de démarrage à partir de ce fichier.

cd /boot
./mkscr
Image Name:   U-Boot boot script
Created:      Tue Jan  9 16:41:18 2018
Image Type:   ARM Linux Script (uncompressed)
Data Size:    640 Bytes = 0.62 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 632 Bytes = 0.62 KiB = 0.00 MiB

Sortez du chroot maintenant (Ctrl + D) et démontez le nouveau système.

umount -R /mnt

Echange des partitions (SDcard)

La dernière chose à faire est d’échanger ces deux partitions sur la carte SD.
Utilisez fdisk, imprimez les partitions existantes, notez où elles commencent et finissent, puis effacez-les.

fdisk /dev/mmcblk0

Avant:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1      1024000 15564799 14540800    7G 83 Linux
/dev/mmcblk0p2         2048  1023999  1021952  499M 83 Linux

Créez deux nouvelles partitions, mais la première débutera et finira à l’endroit où la seconde l’a fait auparavant.

Après:

Périphérique   Amorçage   Début      Fin Secteurs Taille Id Type
/dev/mmcblk0p1             2048  1023999  1021952   499M 83 Linux
/dev/mmcblk0p2          1024000 15564799 14540800     7G 83 Linux

Ecrivez la nouvelle table de partition sur la carte. fdisk va se plaindre

Appeler ioctl () pour relire la table de partition.
La relecture de la table de partition a échoué.Appareil ou ressource occupé

C'est OK, puisqu'une partition est toujours montée en tant que racine de notre système actuel.

Terminer par un sync et redémarrer.

Archlinux arm

Connexion en root
Vérifications
Points de montage boot et root

mount |grep /dev
/dev/sda1 on / type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p1 on /boot type ext2 (rw,relatime,block_validity,barrier,user_xattr,acl)

Adresses IP

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 02:c4:04:40:f0:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.12/24 brd 192.168.0.255 scope global dynamic eth0
       valid_lft 3069045868sec preferred_lft 3069045868sec
    inet6 2a01:e34:ee6a:b270:c4:4ff:fe40:f0ff/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 3069045868sec preferred_lft 3069045868sec
    inet6 fe80::c4:4ff:fe40:f0ff/64 scope link 
       valid_lft forever preferred_lft forever

Utilisateur

créer un utilisateur avec la commande suivante

useradd -m -g users -c 'cubie cubiearch' -s /bin/bash cubie
passwd cubie

Déconnexion puis connexion utilisateur via ssh

ssh cubie@192.168.0.12

Modifier sudoers pour accès sudo sans mot de passe à l’utilisateur eeepc

echo "cubie     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

yaourt

On veut avoir accès à l’outil yaourt
Installer git

sudo pacman -S git

Si pb certificat (SSL certificate problem: certificate is not yet valid) , précéder par git par **GIT_SSL_NO_VERIFY=true **
L’erreur est lié à la date et heure système! Voir paragraphe suivant…

GIT_SSL_NO_VERIFY=true git clone https://aur.archlinux.org/package-query.git
cd package-query
makepkg -si
cd ..
GIT_SSL_NO_VERIFY=true git clone https://aur.archlinux.org/yaourt.git
cd yaourt
makepkg -si
cd ..
# supprimer les sources
sudo rm -r package-query  yaourt

Date et heure

Synchroniser avec un ou des serveurs de temps
Edition du fichier de configuration timesyncd.conf :

sudo nano /etc/systemd/timesyncd.conf

Définir les serveurs de temps :

[Time]
NTP=
FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org

Activer la synchronisation :

sudo timedatectl set-ntp true

Stoper la synchronisation :

sudo timedatectl set-ntp false

Vérifier

timedatectl
                      Local time: mar. 2018-01-09 18:22:45 CET
                  Universal time: mar. 2018-01-09 17:22:45 UTC
                        RTC time: mar. 2018-01-09 17:22:47
                       Time zone: Europe/Paris (CET, +0100)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

[root@cubiearch cubie]# ls -l /etc/ssl/certs/ca-certificates.crt lrwxrwxrwx 1 root root 49 16 mars 2017 /etc/ssl/certs/ca-certificates.crt -> ../../ca-certificates/extracted/tls-ca-bundle.pem

Last-minute thoughts

A message appeared:

[ 408.655073] systemd-journald[128]: Creating journal file /var/log/journal/bd00c0bbc8e94c7197c9d945a65fe627/user-1000.journal on a btrfs file system, and copy-on-write is enabled. This is likely to slow down journal access substantially, please consider turning off the copy-on-write file attribute on the journal directory, using chattr +C.

So let’s disable CoW for for /var/log/journal and all existing files (this must be done from other system, files mustn’t be used during this process):

mv /var/log/journal /var/log/journal_old

mkdir /var/log/journal

chattr +C /var/log/journal

cp -a /var/log/journal_old/* /var/log/journal

rm -rf /var/log/journal_old

Optionally: create yourself a user, upload your public key and disable ssh password and root login.

And since we have btrfs, let’s make a snapshot of our fresh new install:

btrfs subvolume snapshot / root_snapshot_2015-07-10_postinstall

In the next series of posts I will show you how I’ve installed various services into Linux Containers.