Outils pour utilisateurs

Outils du site


archlinux:arch_linux_sur_seagate_goflex_home

Arch Linux sur Seagate GoFlex Home/Net

  • Objectif : Transformer ce GoFlex Home en un serveur/lecteur de musique, contrôlé à distance par un téléphone ou une tablette sous Android. Voir Serveurs de musique sur GoFlex Home.

Installation

Nouvelle installation (février 2015)

  • Installation sur un SSD 120GB : D'abord sur le GoFlex Home, ensuite sur un GoFlex Net.
  • L'ancien u-boot installé ne supporte pas ext4. Avant d'installer le système sur le SSD, installer d'abord (sous l'ancien système ou booter sur une clé usb) le nouveau u-boot. Pour cela, il suffit d'installer le package uboot-goflexhome ou uboot-goflexnet.
  • Voir plus bas Réinstallation.
    ASCII���User comments ASCII���User comments
  • jdb2 et accès au disque : ext4 et Lazy Initialization
  • Le fichier /etc/fstab (4GB pour sda1, tout le reste pour sda2)
    # <file system> <dir>   <type>  <options>       <dump>  <pass>
    /dev/sda1        /       ext4  defaults,noatime   0       1
    /swapfile.img    none    swap    sw               0       0
    /dev/sda2     /archives  ext4  defaults,noatime   0       2

Installation sur GoFlex Home

  • Installation sur le disque SATA 1TB : Il suffit de suivre cette page (date d'installation : 2012-06-18). Quelques précisions :
    • Sur le point 2 : Avant de commencer archlinux, effectuer d'abord une installation complète et normale selon les instructions du manuel via l'interface web du GoFlex Home.
      • Depuis une machine sous linux du réseau local, faire la commande
        # nmap -sP 192.168.0.0/24

        pour découvrir l'adresse IP de GoFlex Home.

    • Sur le point 4 : utiliser le même mot de passe.
    • Swap : Créer un fichier swap de 512MB.
      # dd if=/dev/zero of=/swapfile.img bs=1M count=512
      # mkswap /swapfile.img
      # chmod 0600 /swapfile.img

      Deux façons pour l'utiliser selon le serveur de musique choisi :

      • MPD : Il me semble qu'il n'en a pas besoin. On peut ne pas utiliser swap dans /etc/fstab. L'activer directement par swapon /swapfile.img quand nécessaire (par exemple pour compiler une grosse application).
      • LMS : Il est plus gourmand en RAM. Activer le swapfile dans /etc/fstab avec une ligne
        /swapfile.img    none    swap    sw    0    0

        mais mettre vm.swappiness=0 dans /etc/sysctl.d/99-sysctl.conf (créer ce fichier) pour réduire au maximum le swapping. Avant la compilation d'une grosse application ou la création de la base de données LMS, remettre temporairement la valeur par défaut :

        # echo 60 > /proc/sys/vm/swappiness
  • Réinstallation : La procédure d'une installation initiale comporte deux parties :
    1. Installation de U-Boot sur le NAND (intégré dans la carte de la machine), c'est le point 14 de la méthode d'installation.
    2. Installation du système.
    • Note : Pour une réinstallation sur une clé (ou un disque) usb ou sur un disque dur, il suffit de faire le point 2 “Installation du système”. Il s'agit tout simplement de télécharger le système http://archlinuxarm.org/os/ArchLinuxARM-kirkwood-latest.tar.gz et le décompresser sur le support (partitionné et formaté par exemple en ext4 avec la commande mkfs.ext4) (Voir Installation). Cela permet aussi d'avoir un système de secours en cas de problème du disque dur SATA. On pourra alors booter à partir d'une clé usb sans le disque dur, ensuite hotplug le disque dur et puis réparer (ou au pire réinstaller) le système sur le disque SATA.

Configuration

Quelques découvertes avec la nouvelle installation

  • Systemd/Timers : C'est un remplacement de Cron.
    • Activer fstrim.timer pour SSD. Voir ici.
    • Remplacement de “cron daily” : Prendre fstrim.timer et fstrim.service comme modèles. Créer et activer le timer /etc/systemd/system/my-daily.timer
      [Unit]
      Description=My Daily Timer
      
      [Timer]
      OnStartupSec=1
      OnCalendar=*-*-* 03:30:00
      Persistent=true
      
      [Install]
      WantedBy=multi-user.target

      et créer le service correspondant (pas besoin de l'activer) /etc/systemd/system/my-daily.service

      [Unit]
      Description=My Daily Services
      
      [Service]
      Type=oneshot
      ExecStart=/usr/bin/ntpd -qg
      ExecStartPost= /sbin/hwclock -w   (attention : supprimer cette ligne sur un GoFlex Net qui n'a pas de rtc)
      # On peut ajouter des lignes "ExecStart=..." pour d'autres commandes
      • :!: Le GoFlex Home a un rtc, mais le GoFlex Net n'en a pas. La ligne OnStartupSec=1 n'est pas vraiment nécessaire sur le GoFlex Home, mais nécessaire pour le GoFlex Net pour lancer ntpd 5 minutes après le boot.
    • Voici la commande pour les lister
      # systemctl list-timers
      NEXT                         LEFT        LAST                         PASSED       UNIT                         ACTIVATE
      Sat 2015-02-14 00:00:00 CET  8h left     Fri 2015-02-13 07:55:07 CET  7h ago       logrotate.timer              logrotat
      Sat 2015-02-14 00:00:00 CET  8h left     Fri 2015-02-13 07:55:07 CET  7h ago       man-db.timer                 man-db.s
      Sat 2015-02-14 00:00:00 CET  8h left     Fri 2015-02-13 07:55:07 CET  7h ago       shadow.timer                 shadow.s
      Sat 2015-02-14 03:30:00 CET  12h left    Fri 2015-02-13 15:03:26 CET  1min 49s ago my-daily.timer               my-daily
      Sat 2015-02-14 12:02:00 CET  20h left    Fri 2015-02-13 12:02:00 CET  3h 3min ago  systemd-tmpfiles-clean.timer systemd-
      Mon 2015-02-16 00:00:00 CET  2 days left Fri 2015-02-13 09:58:20 CET  5h 6min ago  fstrim.timer                 fstrim.s
      
      6 timers listed.
      Pass --all to see loaded but inactive timers, too.
  • systemd-timesyncd : désactiver ce service qui tourne en permanence (systemctl status systemd-timesyncd pour le constater). Installer ntp (et vérifier qu'il n'est pas activé par systemd) et une commande dans my-daily.service.
  • systemd-journald : Limiter la taille maximum du journal avec les deux options (par exemple)
    SystemMaxUse=50M
    SystemMaxFileSize=10M

    dans /etc/systemd/journald.conf.

  • systemd-networkd : c'est lui qui s'occupe de la connexion réseau.
    • :!: Changer la ligne
      DHCP=both

      en

       DHCP=v4

      dans /etc/systemd/network/eth0.network. C'est surtout important lorsqu'on recompile le kernel sans ipv6. Sinon pas de réseau au démarrage avec le message d'erreur

      Jan 01 01:00:09 goflexnet systemd-networkd[129]: eth0            : gained carrier
      Jan 01 01:00:09 goflexnet systemd-networkd[129]: eth0            : could not start IPv6 router discovery
      Jan 01 01:00:09 goflexnet systemd-networkd[129]: eth0            : failed
      Jan 01 01:00:09 goflexnet systemd-networkd[129]: eth0            : lost carrier
  • Recompiler le kernel : on ne peut plus faire “makepkg -As –asroot” an tant que root. Il faut créer un user pour utiliser la commande
    $ makepkg -cfs

    (voir plus bas sur la compilation de kernel).

GoFlex Home

  • pacman : utiliser le miroir “France” dans /etc/pacman.d/mirrorlist si le “Geo-IP based mirror” ne marche pas.
  • Boot méthode :
    • Option 1 : C'est ce que j'utilise actuellement. Insérer le disque sata, son système démarre en premier (reconnu comme sda) même si la clé usb système est branchée.
    • Option 2 : Ne pas insérer le disque sata. Laisser le système de la clé usb démarrer (reconnue comme sda). Ensuite “hotplug” le disque sata, il sera automatiquement reconnu comme sdb.
  • Systemd : :!: J'ai refait une installation (2012-12-13) sur la première partition du disque sata en bootant à partir d'une clé usb de secours. La gestion de services est maintenant confiée à Systemd.
    • Le default target est graphical.target
      # ls -l /usr/lib/systemd/system/default.target 
      lrwxrwxrwx 1 root root 16 Dec 18 20:17 /usr/lib/systemd/system/default.target -> graphical.target : 

      Chenger-le à multi-user.target :

      # systemctl enable multi-user.target
      # ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'

      ou bien

      # systemctl set-default multi-user.target
      Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
  • Espace disque restant : Formater tout le reste de l'espace disque en une partion ext3. Monter cette partition au /archives au démarrage en ajoutant la ligne
    /dev/sda2    /archives    ext3    defaults,noatime,noauto,x-systemd.automount    0    2

    dans /etc/fstab.

    • Voir ici pour comprendre pourquoi les options noauto,x-systemd.automount.
  • usb automount (pas besoin) : installer udev-automount.
  • Préparation pour compiler des packages :
    # pacman -S base-devel

    (c'est un peu l'équivalent de “build-essential” de Debian)

  • ntp et hardware clock : Le package openntpd est installé et il écrit trop souvent sur le disque dur, cela empêche le bon fonctionnement du disque spindown. Remplacer le par ntp (et vérifier que ce dernier n'est pas activé par systemd (normalement c'est le cas)). Configurer le pour qu'il se lance une fois par jour : <code># EDITOR=vim crontab -e</code> et ajouter cette ligne <file>0 3 * * * /usr/bin/ntpd -qg; /sbin/hwclock -w </file>
    • Commenter la ligne “restrict ::1” dans /etc/ntp.conf pour ne pas voir le message d'erreur “ntpd[…]: restrict: error in address '::1' on line 17. Ignoring…”.
  • Spindown du disque sata : Pour que le disque sata (sda) entre en état standby (spindown) après 20 minutes d'inactivité. Voir hdparm et systemd. Installer hdparm. Placer le fichier hdparm.service
    [Unit]
    Description=script_hdparm
    [Service]
    ExecStart=/usr/bin/hdparm -S 240 /dev/sda
    [Install]
    WantedBy=multi-user.target

    dans /etc/systemd/system/. Ensuite lancer la commande

    # systemctl enable hdparm
    • Il n'est pas évident que le “Spindown” marche bien. Il faut éliminer tous les facteurs perturbants. Quelques pistes :
      • Examiner les dates et contenus des /var/log/* pour repérer des accès périodiques en écriture de courte période (<24h) aux fichiers logs. Essayer de les désactiver ou différer. Après, il faut aussi faire attention quand on installe/update des packages contenant des logs réguliers.
      • Pour les autres accès au disk, difficile de les détecter. On peut utiliser des outils de monitoring
        # echo 1 > /proc/sys/vm/block_dump
        # dmesg -c
        # cat /proc/kmsg
        # echo 0 > /proc/sys/vm/block_dump
        # dmesg -c
    • Les réglages suivants me conviennent :
      • syslog-ng écrit une ligne “–MARK –” dans /var/log/ toutes les 20 minutes. Il faut le désactiver. Il suffit d'ajouter une option <file>mark_freq (0);</file> dans /etc/syslog-ng/syslog-ng.conf et relancer le service <code># systemctl restart syslog-ng</code>
        • :!: A refaire après une mise à jour de syslog-ng.
      • anacron : inutile pour une machine allumé en permanence. Il est installé avec le package cronie et est lancé toutes les heures via /etc/cron.hourly/0anacron. Ce dernier est configurer dans /etc/cron.d/0hourly. Changer la ligne en <file>#01 * * * * root run-parts /etc/cron.hourly</file> et relancer le service <code># systemctl restart cronie</code>
        • :!: Une mise à jour de cronie installe ce fichier sous le nom 0hourly.pacnew. Il faut le supprimer.
      • sshd : Si on autorise la connexion par ssh depuis Internet, chaque tentative de connexion frauduleuse (il y en a beaucoup) provoque un log dans /var/log/auth.log. Pour éviter ça, changer le port standard de sshd (sur le routeur freebox par exemple) par un autre (entre 49152 et 65535 par exemple).
      • Swap : voir plus haut. Il est possible que le “swapping” perturbe le disque spindown.
      • openntpd : voir plus haut. On le remplace par ntp.
    • Vérification : par exemple un test pendant 24h
      # for i in {1..100}; do date; hdparm -C /dev/sda; sleep 15m; done
    • Un script pour tester l'état idle du disque :
      #! /bin/bash
      # Vérifier si sda est en état idle les 20 derniers minutes (exécuté par cron)
      # D'après http://zackreed.me/articles/85-spin-down-idle-hard-disks-without-hdparm
      
      # Créer deux fichiers dans le ramdisk pour enregistrer les activités du disque
      ( if [ ! -f /dev/shm/1 ] ; then touch /dev/shm/1 /dev/shm/2; fi ; mv /dev/shm/1 /dev/shm/2; cat /proc/diskstats > /dev/shm/1 ) >/dev/null 2>&1
      
      # Vérifier si sda est en état idle depuis le dernier enregistrement.
      # Si oui, noter le dans le fichier /dev/shm/3
      if [ "$(diff /dev/shm/1 /dev/shm/2 | grep sda)" =  "" ]; then echo $(date) > /dev/shm/3; fi
  • Audio : Installer alsa-utils.
    • (résolu) On peut éventuellement voir le message
      cannot get ctl value: req = 0x83, wValue = 0x201, wIndex = 0x0, type = 4
      cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x0, type = 4

      Ceci provient de ALSA et XMOS. Voir ici, pas grave.

  • Time zone : Europe/Paris par
    # timedatectl set-timezone Europe/Paris
  • Scripts de maintenance (logrotate,…) : <code># EDITOR=vim crontab -e</code> et ajouter cette ligne <file>0 3 * * * run-parts /etc/cron.daily</file>
  • Confort : Pour se connecter en SSH sans mot de passe. Sur la machine client :
    $ ssh-keygen  (appuyer toujours sur la touche Enter) 
    $ ssh-copy-id root@ip_du_server
  • Mise à jour de uBoot pour utiliser kernel > 3.2 : Suivre cette page (un résumé).
    • Pour fixer l'adresse MAC (qui permet au routeur freebox de donner un ip fixe à Goflex Home) <code># fw_setenv ethaddr mac_trouvé_sous_la_base_du_goflex_home</code>
    • Pour info, voici la sortie de la commande fw_printenv.
    • :!: La partie Netconsole ne me convient pas. Mais elle n'empêche pas le bon fonctionnement. Voir plus bas si on veut utiliser Netconsole.
    • [résolu depuis 3.8.6] Le kernel 3.6 et 3.7 semblent avoir un problème avec l'interface usb hiFace2. Voici le message d'erreur <file>Feb 14 09:05:40 alarm kernel: [ 1184.097631] ERROR: 1024 KiB atomic DMA coherent pool is too small! Feb 14 09:05:40 alarm kernel: [ 1184.097631] Please increase it with coherent_pool= kernel parameter! Feb 14 09:05:40 alarm kernel: [ 1184.110240] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.257263] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.261340] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.276267] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.280407] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.284471] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.294507] cannot submit urb (err = -12) Feb 14 09:05:41 alarm kernel: [ 1184.302505] cannot submit urb (err = -12) </file> Pour revenir au kernel 3.1, il suffit <code># pacman -Sy linux</code> (voir aussi https://lkml.org/lkml/2013/1/14/153 )
  • Compiler le kernel : Utiliser https://github.com/archlinuxarm/PKGBUILDs/tree/master/core/linux-kirkwood pour compiler un kernel minimal. Exemple pour kernel 3.18.1
    # git clone git://github.com/archlinuxarm/PKGBUILDs.git
    $ cd PKGBUILDs/core/linux-kirkwood
    [On peut aussi prendre les quelques fichiers nécessaires sans git-clone]
    [J'ai seulement besoin de :]
    [archlinuxarm.patch, config (utiliser le mien), linux-kirkwood.install, PKGBUILD]
    [Utiliser mes PKGBUILD et config modifiés (voir plus bas)]
    
    [Maximiser la fenêtre du terminal pour éviter un éventuel problème avec "make menuconfig" :]
    ["Your display is too small to run Menuconfig!]
    [It must be at least 19 lines by 80 columns."]
    
    [Arrêter les applications pour libérer un peu plus de RAM, par exemple]
    $ sudo systemctl stop logitechmediaserver
    
    [Activer swap mode normal]
    $ sudo echo 60 > /proc/sys/vm/swappiness
    
    $ makepkg -s
    $ sudo pacman -U linux-kirkwood-3.18.1-1-arm.pkg.tar.xz
    $ sudo reboot
    • Voici ma config actuelle du noyau 3.18.1.config.goflexhome et le PKGBUILD.
      • :!: Voir plus haut sur systemd-networkd si compiler un noyau sans ipv6.
    • Ajouter linux-kirkwood linux-headers-kirkwood sur la ligne IgnorePkg de /etc/pacman.conf.
    • Au cas où une nouvelle version de kernel rend la machine inaccessible : On peut enlever le disque dur et démarrer avec la clé usb mentionnée plus haut, et ensuite insérer le disque dur. La partition sera montée dans /media/hd-sdb1. Ensuite
      # cd /media/hd-sdb1/
      # mount -t proc proc proc/
      # mount -t sysfs sys sys/
      # mount -o bind /dev dev/
      # mount -t devpts pts dev/pts/
      # chroot /media/hd-sdb1 /bin/bash
      # pacman -S linux-kirkwood
      [ou bien "pacman -U une_ancienne_version_locale"]
      # exit
      # halt
  • Netconsole : Par exemple, ip de GoFlex Home en eth0 est 192.168.0.18 et ip d'un autre PC en eth0 est 192.168.0.12 (préférer ethernet à wifi pour voir plus de messages affichés).
    • On redéfinit d'abord
      # fw_setenv ipaddr '192.168.0.18'
      # fw_setenv ncip '192.168.0.12'
      # fw_setenv ncipk    <-- sans valeur supprime cette ligne
      # fw_setenv serverip '192.168.0.12'
      # fw_setenv usb_custom_params 'ignore_loglevel netconsole=6666@192.168.0.18/eth0,6666@192.168.0.12/'
      # fw_setenv sata_custom_params 'ignore_loglevel netconsole=6666@192.168.0.18/eth0,6666@192.168.0.12/'
    • Lancer sur l'autre PC linux (stopper d'abord son firewall)
      # nc -lup 6666

      et ensuite rebooter le GoFlex Home. Voici un exemple de sortie

      # nc -lup 6666
      
      U-Boot 2011.12 (Apr 18 2012 - 23:08:20)
      Seagate GoFlexNet
      arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q3-67) 4.4.1
      GNU ld (Sourcery G++ Lite 2009q3-67) 2.19.51.20090709
      Hit any key to stop autoboot:  0 
      
      Reset IDE: Bus 0: OK Bus 1: not available  
        Device 0: Model: ST1000DM000-9TS15E Firm: CC92 Ser#: 5YA0FLYL
                  Type: Hard Disk
                  Supports 48-bit addressing
                  Capacity: 953869.7 MB = 931.5 GB (1953525168 x 512)
      Loading file "/boot/uImage" from ide device 0:1 (hda1)
      2542088 bytes read
      Loading file "/boot/uInitrd" from ide device 0:1 (hda1)
      ** File not found /boot/uInitrd
      ## Booting kernel from Legacy Image at 00800000 ...
         Image Name:   Linux-3.8.8-2-ARCH
         Image Type:   ARM Linux Kernel Image (uncompressed)
         Data Size:    2542024 Bytes = 2.4 MiB
         Load Address: 00008000
         Entry Point:  00008000
         Verifying Checksum ... OK
         Loading Kernel Image ... OK
      OK
      
      Starting kernel ...
      
      [... on voit ensuite des messages qu'on retrouvera dans /var/log/everything.log ]
archlinux/arch_linux_sur_seagate_goflex_home.txt · Dernière modification: 2017/08/21 12:43 (modification externe)