Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
vendredi 23 avril 2021

:: Simple application avec Dancer2 ::

Présentation

Dans cet exemple, on va créer une simple application web avec Dancer2.

Pour le déploiement, on se basera sur Starman pour la gestion de l'application avec Nginx en frontal.

Installation de Dancer

Préparation de l'environnement

Afin de sécuriser l'application, on fait tourner Starman (notre serveur d'application) sous une identité propre que nous appelerons starman. La seule manière d'y accéder sera via l'utilisateur root.

$ sudo useradd starman

Brewing Perl

Afin de séparer la distribution Perl installée sur le système de celle que l'on souhaite utiliser pour lancer notre application, nous utiliserons PerlBrew, un outil de gestion des versions de Perl.

Pour installer PerlBrew, cf.Gestion des versions de Perl avec Perlbrew

  • Liste des versions Perl disponibles à l'installation

    # su - starman
    $ perlbrew available
       perl-5.33.2   
       perl-5.32.0   
       perl-5.30.3   
       [...]
  • Installation

    $ perlbrew install perl-5.32.0
  • Vérification de la version installée (deux méthodes)

    1. Lister les versions installées :

      $ perlbrew list
        perl-5.32.0   
    2. Lister les versions disponibles (remarquez le "i" devant la version installée) :

      $ perlbrew available
         perl-5.33.2   
      i  perl-5.32.0   
         perl-5.30.3   
         [...]
  • Utilisation

    1. Pour cette session uniquement

      $ perlbrew use perl-5.32.0
    2. Comme version par défaut à l'ouverture de session

      $ perlbrew switch perl-5.32.0

Installation des modules CPAN

Avant tout, on installe un client cpan. Pour cela, on utilise la commande PerlBrew permettant d'installer cpanminus.

$ perlbrew install-cpanm

Puis on installe les modules :

$ cpanm Dancer2 Starman Daemon::Control

Création de l'application

La méthode la plus rapide pour créer son application est d'utiliser la commande dancer2 qui met en place l'arborescence des répertoires et fichiers à partir d'un squelette standard :

$ dancer2 gen -a MonApp

Cette commande crée le répertoire MonApp ainsi qu'un ensemble de sous-répertoires et fichiers.

Pour lancer l'application, exécuter la commande suivante :

$ cd MonApp/
$ plackup -R lib bin/app.psgi 
Watching lib bin/lib bin/app.psgi for file updates.
HTTP::Server::PSGI: Accepting connections at http://0:5000/

L'application (vide) est dorénavant disponible à l'adresse http://AdresseServeur:5000. (Ctrl+C pour stopper)

Mise en place du service systemd Starman

Pour lancer automatiquement notre application, on crée le fichier /etc/systemd/system/starman.service avec le contenu ci-dessous :

$ sudo vi /etc/systemd/system/starman.service

[Unit]
Description=Starman
After=syslog.target

[Service]
Type=forking
ExecStart=/home/starman/perl5/perlbrew/perls/perl-5.32.0/bin/starman --listen 127.0.0.1:5001 --env development --daemonize /home/starman/apps/MonApp/bin/app.psgi
Restart=always

[Install]
WantedBy=multi-user.target

Lancement et activation du service au démarrage :

$ sudo systemctl start starman.service
$ sudo systemctl enable starman.service

Installation et configuration de Nginx

$ sudo pacman -S nginx

$ sudo vi /etc/nginx/nginx.conf
[...]
server {
    listen       80;
    server_name  www;

    access_log  /var/log/www.access.log;
    error_log   /var/log/www.error.log info;

    location / {
        try_files $uri @proxy;
        access_log off;
        expires max;
    }

    # proxy to Starman listening on 127.0.0.1:5001
    #
    location @proxy {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass       http://127.0.0.1:5001;
    }
}

lundi 05 avril 2021

:: Installation d'Archlinux et Wayland sur Asus Zenbook ::

Liens intéressants

Arch Linux

Wayland

Installation d'Arch Linux

Caractéristiques du portable

Asus Zenbook UX 303 LN
Ecran 13.3 pouces, résolution 3200x1800px, IPS, tactile
Processeur Intel Haswell Core i7-4510U CPU
Chipset Intel HM87
Video Intel 4400 HD intégré + Nvidia GeForce GT840M 2Go
Memory 8Go DDR3
Stockage 256Go SSD
Connectivity Wireless AC, Bluetooth, Lan (avec adapteur USB-Ethernet)
Ports 3 x USB3.0, lecteur de carte SD, HDMI, mini-DisplayPort
Batterie 50 Wh
Dimensions Epaisseur 21mm avec les pieds (18mm sans)
Poids 1.5 kg (3.3 pounds)
Extras Clavier retro-éclairé, haut-parleurs Bang and Olufsen

Préparation de l'installation

  1. Télécharger la dernière iso sur le site de téléchargement Arch Linux et vérifier son intégrité à l'aide des sommes de contrôle MD5 ou SHA1 :

    $ wget http://archlinux.mirrors.ovh.net/archlinux/iso/2021.02.01/archlinux-2021.02.01-x86_64.iso
    $ wget http://archlinux.mirrors.ovh.net/archlinux/iso/2021.02.01/sha1sums.txt
    $ sha1sum -c sha1sums.txt 
  2. Créer la clé USB

    $ sudo dd if=archlinux-2021.02.01-x86_64.iso of=/dev/sdx bs=16384

    où /dev/sdx correspond au périphérique USB (Attention à ne pas se tromper !!)

Démarrage de l'installation

Démarrer sur la clé et sélectionner "Arch Linux install medium (x86_64, UEFI)" dans le menu de démarrage. On arrive sur la ligne de commande avec un prompt root.

Agencement du clavier

    # loadkeys fr

Pour lister les agencements disponibles :

    # find /usr/share/kbd/keymaps/ -type f

Vérifier que l'on est en mode EFI. Si c'est bien le cas, la commande ci-dessous doit afficher les variables EFI :

    # efivar -l 

Connexion réseau wifi

Utiliser la commande iwctl fournie par iwd (iNet wireless daemon) :

# iwctl device list                                           ---> Récupérer le nom de l'interface (ici, wlan0)
# iwctl station wlan0 scan                                    ---> Scan wifi
# iwctl station wlan0 get-networks                            ---> Lister les réseaux wifi détectés
# iwctl --passphrase passphrase station wlan0 connect myssid  ---> Connexion au point d'accès
# ping www.google.com                                         ---> Test de la connexion

Partitionner l'espace disque.

Schéma de partitionnement cible :

NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0 238,5G  0 disk
├─sda1                  8:1    0   512M  0 part  /boot/efi
├─sda2                  8:2    0   512M  0 part  /boot
└─sda3                  8:3    0 237,5G  0 part
  └─cryptroot         254:0    0 G  0 crypt
    ├─vg0-swap        254:1    0 G  0 lvm   [SWAP]
    ├─vg0-root        254:2    0 G  0 lvm   /
    └─vg0-home        254:3    0 G  0 lvm   /home

Création des partitions

# gdisk /dev/sda
Partition Périphérique Taille Système Hex code
EFI /dev/sda1 512M vfat ef00
boot /dev/sda2 512M ext2 8300
cryptroot /dev/sda3 Espace disque restant luks 8300

Formatage des partitions

# mkfs.vfat -F32 /dev/sda1
# mkfs.ext2 /dev/sda2

Chiffrement de la partition principale

# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y --use-random /dev/sda3
# cryptsetup luksOpen /dev/sda3 crypt

Création des volumes logiques

Créer un groupe de volume (arch) et les volumes logiques suivants :

Volume logique Taille
swap 8G
root 40G
home le reste
# pvcreate /dev/mapper/crypt
# vgcreate arch /dev/mapper/crypt
# lvcreate --size 8G arch --name swap
# lvcreate --size 40G arch --name root
# lvcreate --extents +100%FREE vg0 --name home

Création des systèmes de fichiers

# mkfs.ext4 /dev/mapper/arch-root
# mkfs.ext4 /dev/mapper/arch-home
# mkswap /dev/mapper/arch-swap
# swapon /dev/mapper/arch-swap

Montage des partitions

# mount /dev/mapper/arch-root /mnt
# mkdir /mnt/boot && mount /dev/sda2 /mnt/boot
# mkdir /mnt/boot/efi && mount /dev/sda1 /mnt/boot/efi
# mkdir /mnt/home && mount /dev/mapper/arch-home /mnt/home

Sélection des miroirs

Automatique

Sur le système Live, lorsqu'on active la connexion internet, reflector met à jour la liste des miroirs en choisissant les 70 derniers miroirs synchronisés et en les classant par leur bande passante (le plus rapide en haut).

Manuelle

Décommenter et déplacer le miroir préféré en haut du fichier /etc/pacman.d/mirrorlist. Préférer un miroir géographiquement proche (vérifier sur http://archlinux.org/mirrorlist/).

Installation du système et des outils nécessaires au premier démarrage.

 Système de base

# pacstrap /mnt base base-devel linux linux-firmware 

Outils supplémentaires (liste non-exhaustive) :

# pacstrap /mnt grub efibootmgr mkinitcpio lvm2 iwd vim bash-completion man-db

Création du fstab

# genfstab -pU /mnt >> /mnt/etc/fstab

tempfs sur /tmp

# /tmp
tmpfs   /tmp    tmpfs   defaults,noatime,mode=1777  0   0

Options pour SSD

Remplacer les options relatime par noatime sur les partitions sauf celle de boot (limite les accès et augmente donc la durée de vie d'un disque SSD).

Entrer dans le nouveau système

# arch-chroot /mnt /bin/bash

Fuseau horaire

# ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
# hwclock --systohc --utc

Localisation

  • /etc/locale.gen

Décommenter fr_FR.UTF-8 UTF-8 dans le fichier puis regénérer les locales :

# locale-gen
  • /etc/locale.conf

    LANG=fr_FR.UTF-8
  • /etc/vconsole.conf

    KEYMAP=fr

Nom d'hôte

  • /etc/hostname

    myhostname
  • /etc/hosts

    127.0.0.1    localhost
    ::1          localhost
    127.0.1.1    myhostname.domain.local myhostname

Utilisateurs

Modification du mot de passe root

# passwd

Utilisateur supplémentaire

# useradd -m -g users -G wheel username
# passwd username

Configuration de mkinitcpio

Editer le fichier /etc/mkinitcpio.conf

Ajouter les options suivantes avant 'filesystems' :

  • keymap : chargement du clavier
  • encrypt : gestion du chiffrement
  • lvm2 : gestion des volumes logiques
  • resume : gestion du mode hibernation

Note : quelque soit l'ordre choisi, pensez toujours à placer keymap devant encrypt, sous peine de vous retrouver avec un clavier qwerty pour taper la passphrase permettant de déchiffrer le volume principal

Au final, cela donne :

HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck)

Regénérer l'image initrd

# mkinitcpio -p linux

GRUB

Installation

# grub-install

Configuration

Editer le fichier /etc/default/grub et modifier la variable GRUB_CMDLINE_LINUX afin de préciser le périphérique chiffré (cryptroot) et le périphérique d'hibernation (partition de swap) :

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda3:crypt resume=/dev/mapper/arch-swap"

Regénérer le grub.cfg

# grub-mkconfig -o /boot/grub/grub.cfg

Fin de l'installation et redémarrage

# exit
# umount -R /mnt
# swapoff -a
# reboot

Au démarrage la passphrase est demandée afin de déchiffrer le volume puis on accède à la console. On a maintenant un système minimal installé et fonctionnel.

Gestion d'écran HiDPI (High Dots Per Inch)

L'écran de l'UX303LN est un écran 13.3" avec une résolution QuadHD+ de 3200x1800 pixels. Les éléments affichés apparaissent donc trés petits (boutons, polices, etc.), à la limite du lisible.

Vous trouverez ci-dessous une liste (non exhaustive) de modifications permettant de profiter pleinement d'une haute résolution sans avoir besoin d'une loupe :-)

Paramètres X

En l'absence d'un environnement de bureau manipulant les paramètres X (Gnome, KDE, Xfce, etc.), il faut définir ces paramètres manuellement dans le fichier ~/.Xresources :

# Gestion HiDPI
Xft.dpi: 192
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb

Note : Adaptez le paramètre Xft.dpi à votre définition d'écran (ici 192dpi).

XTerm

Ici aussi on modifie le fichier ~/.Xresources pour préciser la police désirée, sa taille et sa résolution :

# Police XTerm
xterm*faceName:DejaVu Sans Mono:size=11:antialias=false
xterm*font: 7x13

Note : Modifiez ces paramètres selon vos desideratas.

Firefox et Thunderbird

Dans Firefox, aller dans les préférences avancées (about:config) et modifier le paramètre layout.css.devPixelsPerPx à 2 (défaut : -1). Dans le cas d'une utilisation multi-écran, il est possible d'utiliser le module Firefox AutoHiDPI (Non testé).

Dans Thunderbird, les paramètres avancés sont disponibles sous Edition / Préférences / Avancé / Editeur de configuration.

Installation de yaourt (Yet AnOther User Repository Tool)

Important : Il est vivement conseillé de se documenter sur AUR afin d'en comprendre les mécanismes et d'utiliser yaourt, ainsi que ABS et makepkg.

Méthode 1 - Installation depuis AUR

curl -O https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz
tar zxvf package-query.tar.gz
cd package-query
makepkg -si
cd ..
curl -O https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz
tar zxvf yaourt.tar.gz
cd yaourt
makepkg -si
cd ..

Méthode 2 - Installation depuis le dépôt archlinux.fr

Editer le fichier /etc/pacman.conf et ajouter les lignes suivantes :

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

Puis, installer le paquet yaourt :

pacman -Sy yaourt