samedi 23 mars 2013

Installer Arch Linux sur le Zyxel NSA320

Cet article va vous décrire les étapes que j'ai suivi pour installer Arch Linux sur mon nouveau Zyxel NSA 320. Un article qui s'il avait été écrit par un autre que moi, aurait pu m'aider dans les différents problèmes lors de l'installation.
Lorsque j'ai installé Arch Linux, j'ai suivi la procédure officielle. Elle m'a semblé incomplète puisque, j'ai été confronté à de multiples problèmes. Mais, je ne suis pas un expert en systèmes Linux, je ne veux pas la remplacer. Il s'agit toujours de la procédure officielle, elle est donc susceptible de changer, de s'améliorer, n'hésitez donc pas à vous y référer

Avant toute chose

  •  Faites une sauvegarde de toutes vos données.
  • Achetez un Cable Serie-USB TTL 3.3V. (J'ai acheté celui vendu par adafruit pour le Rasberry Pi). Strictement parlant, il n'est pas nécessaire mais il est tout de même fortement conseillé vu que les scripts d'installation ne sont pas encore tout à fait au point. De plus, ça rajoutera une corde dans votre expérience de geek !

Préparer une clé USB pour installer U-Boot

  1. Formater en Fat
  2. Extraire les fichiers de l'archive NSA320-alarm.tgz sur la racine de la clé.
  3. Et (pour suivre la procédure officielle, chez moi ça n'a pas marché), copiez ce fichier sur la racine de la clé en le renommant rootfs.tgz.

Connecter le câble série 

Bon là, c'est la partie où j'ai galéré. Je ne savais pas où connecter mon cable série.
Votre câble série est composé de 4 fils : VCC, TX, RX, GND
Sur le câble d'adafruit: VCC = rouge, TX = blanc, RX = vert, GND = noir.
Ne pas connecter le connecter VCC ! Le NSA utilisera son alimentation normale !

Premier boot

Mettez votre disque dur dans l'emplacement à gauche (HHD1). Branchez une connexion réseau.
Branchez votre cable série sur votre ordinateur de bureau. Nous allons établir une connexion 115200 bauds sur le cable série. Si vous utilisez ubuntu comme moi, exécutez cette commande (sur d'autre systèmes, d'autres programmes existent...) :
 sudo screen /dev/ttyUSB0 115200
Votre écran est noir en attente de data, mettez donc l'alimentation et suivez le processus d'installation... :-)
Si vous avez plus de chance que moi et que tout se déroule bien, passez directement à la phase post-installation.
Si vous avez moin de chance, votre processus se sera stoppé à "done, booting the kernel.". Suivez donc le reste de la procédure

Préparer votre disque dur

Suivez les étapes décrites dans le script 2 de votre clé usb :
  • Préparer 1 partition primaire de 16M et une autre partition primaire pour le reste de l'espace.
  • Formater la première en ext2 avec le label "boot".
  • Formater la seconde en ext4 avec le label "rootfs".
  • Les monter.
  • Copier le contenu de rootfs.tgz (voir + haut) dans la 2e partition.
  • Créer ce fichier dans le répertoire root :  power_resume.sh avec ce contenu (celui ci va server à régler le problème de la mauvais reconnaissance de la carte réseau) :
#!/bin/bash
# power_resume.sh [0/1]
# 0 to disable, 1 to enable.
# enable/disable resume from power loss.

# export both gpios
echo 47 > /sys/class/gpio/export
echo 49 > /sys/class/gpio/export

# 49 out, value 1
echo "out" > /sys/class/gpio/gpio49/direction
echo 1 > /sys/class/gpio/gpio49/value
# 47 out, value 1
echo "out" > /sys/class/gpio/gpio47/direction
echo $1 > /sys/class/gpio/gpio47/value
# set 49 value 0
echo 0 > /sys/class/gpio/gpio49/value

  • Copier le répertoire boot/ de rootfs.tgz dans la 1e partition.
Voici le code qui fait tout ça sur une machine Linux :

fdisk /dev/sda
o
n
p
1
+16M
n
p
2
p
w

mkfs.ext2 -L "boot" /dev/sda1
mkfs.ext4 -L "rootfs" /dev/sda2

mkdir -p /tmp/boot
mount -t ext2 /dev/sda1 /tmp/boot
mkdir -p /tmp/rootfs
mount -t ext4 /dev/sda2 /tmp/rootfs

tar xzf /mnt/parnerkey/rootfs.tgz -C /tmp/rootfs/

cp -aR /tmp/rootfs/boot/* /tmp/boot/

 Le boot qui marche

Vous avez placé votre disque dur ?  branché votre cable série ? Branché une connexion réseau ?
Dès le démarrage, appuyez sur une touche de votre clavier pour interrompre le processus.
Exécutez ces commandes :
setenv arcNumber 3956
 

setenv mainlineLinux yes
 

setenv bootargs_stock 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/nfs rw init=/init'
 

setenv bootargs_linux 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000(uboot),0x80000(uboot_env),0x80000(key_store),0x80000(info),0xA00000(etc),0xA00000(kernel_1),0x2FC0000(rootfs1),0xA00000(kernel_2),0x2FC0000(rootfs2) root=/dev/sda2 rw rootwait loglevel=8'
 

setenv bootcmd_linux 'setenv bootargs $(bootargs_linux); ide reset; ext2load ide 0:1 $(loadaddr) /uImage; bootm $(loadaddr)'
fw_setenv bootcmd_stock 'setenv bootargs $(bootargs_stock); nand read.e $(loadaddr) $(kernel_addr) 0xA00000; bootm $(loadadr)'
 

setenv to_stock "setenv mainlineLinux no; setenv bootcmd \'run bootcmd_stock\'; saveenv; reset"
 

setenv to_linux "setenv mainlineLinux yes; setenv bootcmd \'run bootcmd_linux\'; saveenv; reset"

Et puis, la commande magique :
run bootcmd_linux

Post installation

Identifiez vous en tant que root (sans mot de passe)
  1. Changez votre mot de passe avec "passwd"
  2. Réglez l'horloge : date MMDDhhmmYYYY  et puis hwclock -w
  3.  Dans le répertoire /root. Donnez le droit en exécution au script qu'on a créé "power_resume.sh" : chmod +x power_resume.sh. Et puis : ./power_resume.sh 1
Votre système est maintenant fonctionnel, et accessible via ssh. N'oubliez pas de regarder votre adresse réseau avec ifconfig.

9 commentaires:

  1. Salut, est-ce que t'arrives à éteindre ton NSA et le rallumer en recevant une adresse ip sur archlinux seulement?

    ou dois-tu aussi te logger en premier sur le stock firmware pour avoir le eth_link ready?

    Bonne journée

    Tonkiplis

    RépondreSupprimer
    Réponses
    1. Oui, c'est ok : Le script power_resume.sh permet cela.

      Supprimer
  2. Bonjour,

    Le RAID est il toujours géré ?


    Merci,

    David

    RépondreSupprimer
    Réponses
    1. Euh que je sache, il n'y a pas de contrôleur RAID.

      Supprimer
  3. Pourquoi est-ce que tu n'installes pas simplement un client ssh sur le firmware de base? (par exemple en utilisant ton serial to TTL (U-Boot)) ou le client telnet que fonctionne avec le stock firmware?

    Enfait, est-ce que cela est possible?

    Quel est l'avantage d'installer archlinux si ce que je décris ci-dessus est possible?

    Bonne journée,

    Tonkiplis

    RépondreSupprimer
    Réponses
    1. Le but de la manoeuvre, c'est d'installer une distribution Linux pour pouvoir bénéficier de tout ce qui va avec : packages, etc.

      Supprimer
  4. Merci beaucoup!

    précisions:
    1. copier le contenu du répertoire /boot (le fichier uimage) à la racine de la partition "boot" et ne pas mettre le dossier /boot à la racine...

    2. pour ma part, il m'a fallu entrer un mot de passe pour root.. le mot de passe est "root"... c'est bête mais on peu perdre pas mal de temps.. ;-)

    3. la commande "fw_setenv bootcmd_stock..." ne fonctionne pas mais avec "setenv bootcmd_stock..." oui.. j'ai enlevé le "fw_" pour que ça passe...

    Voilà chez moi ça fonctionne ... merci encore pour ton aide!

    PSOK

    RépondreSupprimer
    Réponses
    1. Merci pour ces précisions PSOK. Le point 2 me semble essentiel en effet :-).

      J'ai toujours des soucis au reboot de la machine, parfois la carte réseau n'est pas reconnue... Il faudra mener une investigation plus poussée...

      Supprimer
  5. Impossible de faire fonctionner "Iptables".. tout essayé.. réinstaller iptables.. etc.. Je voulais installer le logiciel "fail2ban" qui permets de bloquer l'accès des IP qui ont tenté d'entrer avec un mauvais mot de passe... histoire d'éviter les "bruteforceur" de mot de passe via SSH.. Si quelq'un a une idée...

    PSOK

    RépondreSupprimer