ReadyNas DUO v2: Debian & OpenMediaVault

Sommaire:

  • Mon idée
  • Comment procéder?
  • Contraintes
  • Solutions
  • Préparer le PC pour la compilation d’un kernel ARM
  • Connaitre le pilote utilisé par la carte son USB
  • Construire, configurer et compiler le kernel
  • Acceder à la console série du NAS
  • Installer le serveur TFTP
  • Test du kernel
  • Lancement du nouveau kernel avec l’installeur Debian
  • Installation de Debian
  • Création du uInitramfs
  • Ecriture des changements dans la NAND
  • Changements de u-boot
  • Installation de Openmediavault
  • Mon idée

Je part d’une constatation simple: j’ai depuis toujours besoin d’avoir de la musique où que je sois, quoi que je fasse.
Quoi de mieux que pouvoir contrôler sa musique depuis n’importe quel endroit de la maison?
Jusqu’à peu, toute ma musique était stockée sur un PC, avec un câble jack-RCA pour envoyer ça dans mon ampli.

Maintenant que j’ai acheté mon Netgear ReadyNas Duo v2, c’est lui qui stocke ma playlist.. Mais ça me gêne de devoir laisser allumé le NAS + le PC pour avoir de la musique.

Donc, je cherche un moyen de contrôler la diffusion musicale de l’appartement par application mobile, et que ça soit ce gentil NAS qui s’occupe de jouer les musiques, et pourquoi pas, aussi streamer des radios.

  • Comment procéder?

J’ai déjà un système de diffusion musicale avec des haut-parleurs répartis dans l’appartement, tous reliés à l’ampli via le réseau de prises téléphonique (ces prises comportent 8 fils, seulement 2 sont utilisés pour le téléphones ou l’ADSL.)
Je compte trouvé un moyen d’ajouté une sortie audio (carte son USB possible?) sur le ReadyNas, afin qu’il s’occupe dirrectement d’envoyer le son à l’ampli, et chercher un moyen de le contrôler à distance (client MPD?)

  • Contraintes

Ce nas étant d’entrée de gamme, plusieurs problèmes se posent:

  • Pas de sortie audio
  • Le kernel d’origine ne prend pas en charge les cartes son USB
  • Le ReadyNas Duo v2 dispose d’une système d’exploitation Debian trop ancien ce qui ne permet pas d’installer OpenMediaVault ou un client MPD via les dépots
  • Solutions

L’ajout d’une sortie audio se fera par une carte son USB avec sortie S/PDIF (pour profiter d’une liaison numérique entre le NAS et l’ampli).

Afin qu’elle soit reconnue, il faudra compiler sois-même un noyaux en y intégrant les modules audio USB.

Coté système d’exploitation, je choisis d’installer Debian 7.11 avec OpenMediaVault 2.0 (OMV n’est pas encore installable proprement sur Debian 8)

  • Préparer le PC pour la compilation d’un kernel ARM

Afin de pouvoir compiler un noyaux ARM, je met à jour mon système et j’installe l’environnement de Compilation Croisé (Cross-compilation). Etant sous ArchLinux voilà coùmment je prossède :

[kroogy@melon ~]$ yaourt -Syu 
Mot de passe de kroogy :  
Mot de passe : 
:: Synchronisation des bases de données de paquets... 
core           120,8 KiB    549K/s 00:00 [######################] 100% 
extra         1755,8 KiB   1203K/s 00:01 [######################] 100% 
community        3,7 MiB   1123K/s 00:03 [######################] 100% 
multilib       184,4 KiB    991K/s 00:00 [######################] 100% 
 
[kroogy@melon]$ yaourt -S arm-linux-gnueabihf-binutils arm-linux-gnueabihf-gcc arm-linux-gnueabihf-glibc arm-linux-gnueabihf-linux-api-headers
  • Connaitre le pilote utilisé par la carte son USB

Je branche la carte son USB à mon PC de tous les jours et j’exécute :

[kroogy@melon ~]$ usb-devices 
[...]
T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#=  4 Spd=12  MxCh= 0 
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1 
P:  Vendor=040d ProdID=3408 Rev=00.61 
S:  Manufacturer=VIA Technologies Inc. 
S:  Product=VIA USB Dongle 
C:  #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=100mA 
I:  If#= 0 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=snd-usb-audio
I:  If#= 1 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=snd-usb-audio
I:  If#= 2 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=snd-usb-audio
I:  If#= 3 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
[...]

Le module utilisé par la carte son, à ajouter au noyau, sera SND_USB_AUDIO.

  • Construire, configurer et compiler le kernel

Téléchargement du dernier noyaux disponible (4.8.6) et extraction:

[kroogy@melon ~]$ mkdir kernel_nas && cd kernel_nas 
[kroogy@melon ~]$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.6.tar.gz
[kroogy@melon ~]$ tar -xzvf linux-4.8.6.tar 
[kroogy@melon ~]$ cd linux-4.8.6

Pour la configuration du noyaux, je me base sur le travail effectué par l’excellent http://natisbad.org en récupérant le fichier config-4.4.1.duo_v2 qu’il à déjà optimisé en faisant une analyse physique complète de ce NAS.
Si vous souhaitez avoir la même configuration que moi, voici mon fichier de conf pour le kernel 4.8.6. Vous pouvez alors sauter l’étape de configuration.

[kroogy@melon ~]$ wget http://natisbad.org/nas-kernels/config-4.4.1.duo_v2
[kroogy@melon ~]$ mv config-4.4.1.duo_v2 .config 
[kroogy@melon ~]$ export ARCH=arm 
[kroogy@melon ~]$ export CROSS_COMPILE=arm-linux_gnueabihf-

Comme son fichier de configuration est conçue pour une version de noyaux plus ancienne, le fichier doit être mis à jour. Cela se fait avec make oldconfig qui pose interactivement des questions portants sur les nouvelles options. N’ayant pas besoin des nouveautés, j’utilise make oldnoconfig qui va répondre négativement à toutes les questions.

[kroogy@melon ~]$ make oldnoconfig 
scripts/kconfig/conf  --olddefconfig Kconfig 
# 
# configuration written to .config 
# 
[kroogy@melon ~]$ make menuconfig

Là, il s’agit d’integrer le module SND_USB_AUDIO au Kernel.
Il se situe dans Device Drivers / Sound card support / Advanced Linux Sound Architecture / USB sound devices (NEW) / USB Audio/MIDI driver

Ne pas oublier de sauvegarder, puis on peut quitter.

Si ce n’est pas déjà fait, cherchez-vous un café.. Le long travail commence: la compilation!
Il s’agit de contruire une première image du kernel (zImage). Il faudra ensuite y intégrer le fichier .dtb (Device Tree Blob), compiler à partir du .dts (Device Tree Source), qui contient toutes les informations sur la connections des GPIO du processeur comme les boutons, les led, les capteurs ou encore la structure de la mémoire nand. Et enfin, compilation du kernel uImage servant au boot du système sur le périphérique.
Le paramètre LOADADDR=0x00008000 indique l’endroit de la NAND où il sera (plus tard) écrit.

Tout comme avant, pour vous fair gagner de temps et dans un élan de générosité incroyable, je vous propose:

Il n’est pas gentil le kroogy?

Voici par exemple le fichier “kirkwood-netgear_readynas_duo_v2.dts”:

/*
 * Device Tree file for NETGEAR ReadyNAS Duo v2
 *
 * Copyright (C) 2013, Arnaud EBALARD <arno@natisbad.org>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */
/dts-v1/;
#include "kirkwood.dtsi"
#include "kirkwood-6282.dtsi"
/ {
    model = "NETGEAR ReadyNAS Duo v2";
    compatible = "netgear,readynas-duo-v2", "netgear,readynas", "marvell,kirkwood-88f6282", "marvell,kirkwood";
    memory { /* 256 MB */
        device_type = "memory";
        reg = <0x00000000 0x10000000>;
    };
    chosen {
        bootargs = "console=ttyS0,115200n8 earlyprintk";
        stdout-path = &uart0;
    };
    ocp@f1000000 {
        pinctrl: pin-controller@10000 {
            pmx_button_power: pmx-button-power {
                marvell,pins = "mpp47";
                marvell,function = "gpio";
            };
            pmx_button_backup: pmx-button-backup {
                marvell,pins = "mpp45";
                marvell,function = "gpio";
            };
            pmx_button_reset: pmx-button-reset {
                marvell,pins = "mpp13";
                marvell,function = "gpio";
            };
            pmx_led_blue_power: pmx-led-blue-power {
                marvell,pins = "mpp31";
                marvell,function = "gpio";
            };
            pmx_led_blue_activity: pmx-led-blue-activity {
                marvell,pins = "mpp38";
                marvell,function = "gpio";
            };
            pmx_led_blue_disk1: pmx-led-blue-disk1 {
                marvell,pins = "mpp23";
                marvell,function = "gpio";
            };
            pmx_led_blue_disk2: pmx-led-blue-disk2 {
                marvell,pins = "mpp22";
                marvell,function = "gpio";
            };
            pmx_led_blue_backup: pmx-led-blue-backup {
                marvell,pins = "mpp29";
                marvell,function = "gpio";
            };
            pmx_poweroff: pmx-poweroff {
                marvell,pins = "mpp30";
                marvell,function = "gpio";
            };
        };
        clocks {
               g762_clk: g762-oscillator {
                 compatible = "fixed-clock";
                 #clock-cells = <0>;
                 clock-frequency = <8192>;
               };
        };
        i2c@11000 {
            status = "okay";
            rs5c372a: rs5c372a@32 {
                compatible = "ricoh,rs5c372a";
                reg = <0x32>;
            };
            g762: g762@3e {
                compatible = "gmt,g762";
                reg = <0x3e>;
                clocks = <&g762_clk>; /* input clock */
                fan_gear_mode = <0>;
                fan_startv = <1>;
                pwm_polarity = <0>;
            };
        };
        serial@12000 {
            status = "okay";
        };
        sata@80000 {
            status = "okay";
            nr-ports = <2>;
        };
    };
    gpio-leds {
        compatible = "gpio-leds";
        pinctrl-0 = < &pmx_led_blue_power &pmx_led_blue_activity
                  &pmx_led_blue_disk1 &pmx_led_blue_disk2
                  &pmx_led_blue_backup >;
        pinctrl-names = "default";
        power_led {
            label = "status:blue:power_led";
            gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
            default-state = "keep";
        };
        activity_led {
            label = "status:blue:activity_led";
            gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
        };
        disk1_led {
            label = "status:blue:disk1_led";
            gpios = <&gpio0 23 GPIO_ACTIVE_LOW>;
        };
        disk2_led {
            label = "status:blue:disk2_led";
            gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
        };
        backup_led {
            label = "status:blue:backup_led";
            gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
        };
    };
    gpio-keys {
        compatible = "gpio-keys";
        pinctrl-0 = <&pmx_button_power &pmx_button_backup
                 &pmx_button_reset>;
        pinctrl-names = "default";
        power-button {
            label = "Power Button";
            linux,code = <KEY_POWER>;
            gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
        };
        reset-button {
            label = "Reset Button";
            linux,code = <KEY_RESTART>;
            gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
        };
        backup-button {
            label = "Backup Button";
            linux,code = <KEY_COPY>;
            gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
        };
    };
    gpio-poweroff {
        compatible = "gpio-poweroff";
        pinctrl-0 = <&pmx_poweroff>;
        pinctrl-names = "default";
        gpios = <&gpio0 30 GPIO_ACTIVE_LOW>;
    };
    regulators {
        compatible = "simple-bus";
        #address-cells = <1>;
        #size-cells = <0>;
        usb3_regulator: usb3-regulator@1 {
            compatible = "regulator-fixed";
            reg = <1>;
            regulator-name = "USB 3.0 Power";
            regulator-min-microvolt = <5000000>;
            regulator-max-microvolt = <5000000>;
            enable-active-high;
            regulator-always-on;
            regulator-boot-on;
            gpio = <&gpio1 14 GPIO_ACTIVE_HIGH>;
        };
    };
};
&nand {
    status = "okay";
    partition@0 {
        label = "u-boot";
        reg = <0x0000000 0x180000>;
        read-only;
    };
    partition@180000 {
        label = "u-boot-env";
        reg = <0x180000 0x20000>;
    };
    partition@200000 {
        label = "uImage";
        reg = <0x0200000 0x600000>;
    };
    partition@800000 {
        label = "minirootfs";
        reg = <0x0800000 0x1000000>;
    };
    partition@1800000 {
        label = "jffs2";
        reg = <0x1800000 0x6800000>;
    };
};
&mdio {
    status = "okay";
    ethphy0: ethernet-phy@0 { /* Marvell 88E1318 */
        reg = <0>;
    };
};
ð0 {
    status = "okay";
    ethernet0-port@0 {
        phy-handle = <ðphy0>;
    };
};
&pciec {
        status = "okay";
};
&pcie0 {
    status = "okay";
};
[kroogy@melon linux-4.8.6]$ time LOADADDR=0x00008000 make -j 16
scripts/kconfig/conf  --silentoldconfig Kconfig
  CHK     include/config/kernel.release
  WRAP    arch/arm/include/generated/asm/clkdev.h
  WRAP    arch/arm/include/generated/asm/bitsperlong.h
  WRAP    arch/arm/include/generated/asm/cputime.h
  WRAP    arch/arm/include/generated/asm/current.h
  UPD     include/config/kernel.release
  [...]
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
real    3m40,187s
user    18m48,753s
sys    1m16,253s
 
[kroogy@melon linux-4.8.6]$ cat arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dtb >> arch/arm/boot/zImage
[kroogy@melon linux-4.8.6]$ time LOADADDR=0x00008000 make uImage
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  […]
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-4.8.6.duov2
Created:      Thu Nov 24 11:29:37 2016
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    4419984 Bytes = 4316.39 kB = 4.22 MB
Load Address: 00008000
Entry Point:  00008000
  Kernel: arch/arm/boot/uImage is ready
real    13m50,535s
user    13m15,967s
sys    1m8,950s

Le fichier uImage peut être copié dans le dossier tftp du serveur ainsi que sur une clef USB.

[kroogy@melon ~]$ sudo cp arch/arm/boot/uImage /srv/tftp/
[kroogy@melon ~]$ sudo cp arch/arm/boot/uImage /run/media/kroogy/cle_usb/
  • Acceder à la console série du NAS

L’accès série est absolument nécessaire. Il représente la seul façon de communiquer avec le NAS, car la connexion SSH ne sera pas encore active pendant la phase de boot, et il ne dispose pas de sortie graphique (en tout cas pas encore.. tout se rajoute 😀 )
J’utilise un petit module chinois USB vers rs232 qui se trouve à 1€ sur ebay. Veillez bien à croiser RX et TX (ce que le PC envoi, le NAS le reçoit, et vice versa..).
Pas besoin de connecter le +3.3V ou le GND. Le module est alimenté par USB.

La connection se fait à un débit de 115200b/s.

[kroogy@melon ~]$ yaourt -S minicom

Le ReadyNas Duo est éteint et débranché, lancement de la console d’administration:

[kroogy@melon ~]$ sudo minicom
Bienvenue avec minicom 2.7
OPTIONS: I18n 
Compilé le Dec  8 2016, 18:45:36.
Port /dev/ttyUSB0, 18:58:58
Tapez CTRL-A Z pour voir l'aide concernant les touches spéciales

Au branchement de l’alimentation électrique du NAS et sans aucune action sur le bouton Power, voilà ce qu’on obtiens:

         __  __                      _ _
        |  \/  | __ _ _ ____   _____| | |
        | |\/| |/ _` | '__\ \ / / _ \ | |
        | |  | | (_| | |   \ V /  __/ | |
        |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_ 
| | | |___|  _ \ / _ \ / _ \| __| 
| |_| |___| |_) | (_) | (_) | |_ 
 \___/    |____/ \___/ \___/ \__| 
 ** MARVELL BOARD: DB-88F6282A-BP LE 
U-Boot 1.1.4 (Feb  6 2012 - 14:40:46) Marvell version: 3.4.27
Netgear version: Uboot-1_1_4-NetgearDUOV3-V1008
U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006D0120
Soc: MV88F1155 Rev 1 (DDR3)
CPU running @ 1600Mhz L2 running @ 533Mhz
SysClock = 533Mhz , TClock = 200Mhz 
DRAM unknown CAL  tRP = 8 tRAS = 20 tRCD=8
DRAM CS[0] base 0x00000000   size 256MB 
DRAM Total size 256MB  16bit width
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:128 MB
Flash:  0 kB
CPU : Marvell Feroceon (Rev 1)
Streaming disabled 
Write allocate disabled
USB 0: host mode
PEX 0: PCI Express Root Complex Interface
PEX interface detected Link X1
Plug On and Power down, Please Switch On !

Il nous invite donc à “Power On” la bête, mais attention, il va falloir appuyer sur n’importe quelle touche lors du BootWait:

Switch On !                                                                     
 
Net:   egiga0 [PRIME]                                                           
Hit any key to stop autoboot:  2   <<-- BootWait de 3secondes

Si vous voyez apparaître ceci, félicitation, je vous présente la console d’administration de uBoot!

Net:   egiga0 [PRIME]                                                           
Hit any key to stop autoboot:  0                                                
Marvell>>
  • Installer le serveur TFTP

Si depuis 10minutes vous vous demandez si le noyaux précédemment créé va fonctionner, réponse dans 30secondes. Notre nouveau kernel ayant déjà été déplacer dans /var/tftp/uImage, nous pouvons lancer la réception de celui-ci par TFTP, sur le NAS, et le tester:

Marvell>> tftpboot 1200000 uImage                                               
Using egiga0 device                                                             
TFTP from server 192.168.5.116; our IP address is 192.168.5.102                 
Filename 'uImage'.                                                              
Load address: 0x1200000                                                         
Loading: #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         ########################################                               
done                                                                            
Bytes transferred = 4530180 (452004 hex)
Marvell>> set bootargs console=ttyS0,115200 earlyprintk                         
Marvell>> bootm 0x1200000                                                       
## Booting image at 01200000 ...                                                
   Image Name:   Linux-4.8.6.duov2                                              
   Created:      2016-11-24  15:09:39 UTC                                       
   Image Type:   ARM Linux Kernel Image (uncompressed)                          
   Data Size:    4530116 Bytes =  4.3 MB                                        
   Load Address: 00008000                                                       
   Entry Point:  00008000                                                       
   Verifying Checksum ... OK                                                    
OK                                                                              
 
Starting kernel ...                                                             
 
Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0                                
[    0.000000] Linux version 4.8.6.duov2 (kroogy@melon) (gcc version 6.1.1 20166
[    0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=000539f           
[...]                  
[    3.808476] Kernel panic - not syncing: VFS: Unable to mount root fs on unkn)
[    3.816779] ---[ end Kernel panic - not syncing: VFS: Unable to mount root f)

Je ne pensais jamais pouvoir dire ça un jour, mais le Kernel Panic signifie que le noyaux est fonctionnel! Il n’arrive juste pas à trouver le système. Normal, on ne l’installe que dans la prochaine partie.

  • Lancement du nouveau kernel avec l’installeur Debian

Voulant installer Debian 7, je télécharge la net install de Wheezy, et la copie dans le répertoire du serveur TFTP.

[kroogy@melon linux-4.8.6]$ wget ftp://ftp.fr.debian.org/debian/dists/wheezy/main/installer-armel/current/images/kirkwood/netboot/marvell/guruplug/uInitrd
[kroogy@melon linux-4.8.6]$ sudo mv uInitrd /srv/tftp/

A partir de là, tout se fera dans la console série du ReadyNas Duo v2.

Réception du Kernel testé et de l’installeur Debian Wheezy:

Marvell>> tftpboot 1200000 uImage                                               
Using egiga0 device                                                             
TFTP from server 192.168.5.116; our IP address is 192.168.5.102                 
Filename 'uImage'.                                                              
Load address: 0x1200000                                                         
Loading: #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         ########################################                               
done                                                                            
Bytes transferred = 4530180 (452004 hex)                                        
Marvell>> tftpboot 2000000 uInitrd                                              
Using egiga0 device                                                             
TFTP from server 192.168.5.116; our IP address is 192.168.5.102                 
Filename 'uInitrd'.                                                             
Load address: 0x2000000                                                         
Loading: #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         ###################################                                    
done                                                                            
Bytes transferred = 4835978 (49ca8a hex)

Le kernel et l’install étants chargés en mémoire, respectivement à 0x1200000 et 0x2000000, on peut démarrer l’installation avec le nouveau kernel:

Marvell>> set bootargs console=ttyS0,115200 earlyprintk
Marvell>> bootm 0x1200000 0x2000000                                             
## Booting image at 01200000 ...                                                
   Image Name:   Linux-4.8.6.duov2                                              
   Created:      2016-11-24  15:09:39 UTC                                       
   Image Type:   ARM Linux Kernel Image (uncompressed)                          
   Data Size:    4530116 Bytes =  4.3 MB                                        
   Load Address: 00008000                                                       
   Entry Point:  00008000                                                       
   Verifying Checksum ... OK                                                    
OK                                                                              
## Loading Ramdisk Image at 02000000 ...                                        
   Image Name:   debian-installer ramdisk                                       
   Created:      2016-05-30  22:26:50 UTC                                       
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)                      
   Data Size:    4835914 Bytes =  4.6 MB                                        
   Load Address: 00000000                                                       
   Entry Point:  00000000                                                       
   Verifying Checksum ... OK                                                    
 
Starting kernel ...                                                             
 
Uncompressing Linux... done, booting the kernel.                                
[    0.000000] Booting Linux on physical CPU 0x0                                
[    0.000000] Linux version 4.8.6.duov2 (kroogy@melon) (gcc version 6.1.1 20166
[    0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=000539f
[...]
  • Installation de Debian

[…]

  • Création du uInitramfs

uInitramfs est lanceé par le noyaux, une fois que ce dernier a préparé tous les pilotes nécessaires, et s’occupe de fournir un système fonctionnel à l’utilisateur.
Pour générer l’uInitramfs, il nous faut chrooter Debian…Pas le choix, on recommence le lancement du nouveau kernel avec l’installeur Debian et l’installation de Debian en stoppant l’installation à Partition disks pour exécuter un shell.

~ # mount /dev/sdb1 /mnt
~ # mount -o bind /proc /mnt/proc/
~ # mount -o bind /dev /mnt/dev 
~ # mount -o bind /dev/pts /mnt/dev/pts/                                                 
~ # mount -o bind /sys /mnt/proc/sys
~ # chroot mnt /bin/bash                                                        
root@NAS:/# 
root@NAS:/# apt-get update
root@NAS:/# apt-get upgrade
root@NAS:/# apt-get install initramfs-tools u-boot-tools
root@NAS:/# mkinitramfs -o /tmp/initramfs-4.4.1 -r /dev/mapper/mvg-slash -v
[…]
Building cpio /tmp/initramfs-4.4.1 initramfs 
root@NAS:/# mkimage -A arm -O linux -T ramdisk -C none -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initramfs-4.4.1 /boot/uInitramfs
Image Name:   initramfs                                                         
Created:      Thu Nov 24 21:40:40 2016                                          
Image Type:   ARM Linux RAMDisk Image (uncompressed)                            
Data Size:    2768478 Bytes = 2703.59 kB = 2.64 MB                              
Load Address: 00000000                                                          
Entry Point:  00000000
  • Ecriture des changements dans la NAND

💡 A cette étape, il faut avoir copier le uImage (kernel) de la clef USB (celle de la 6e partie) vers /boot/uImage

Installation du logiciel permettant la gestion de la NAND et vérification de partitions:

root@NAS# apt-get install mtd-utils
root@NAS:# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00180000 00020000 "u-boot"
mtd1: 00020000 00020000 "u-boot-env"
mtd2: 00600000 00020000 "uImage"
mtd3: 01000000 00020000 "minirootfs"
mtd4: 06800000 00020000 "jffs2"

Ecriture du noyaux, du uInitramfs en mémoire et contrôle par contrôle de somme sha256 l’intégrité des données.

root@NAS# flash_erase /dev/mtd2 0 0
root@NAS# nandwrite -p /dev/mtd2 /boot/uImage
root@NAS# dd if=/dev/mtd2 of=/tmp/o bs=`wc -c /boot/uImage | cut -d' ' -f1` count=1
1+0 records in
1+0 records out
3664035 bytes (3.7 MB) copied, 0.736338 s, 5.0 MB/s
root@NAS# sha256sum /tmp/o /boot/uImage
c1e844c09bbf39bb09ff25c024379ae935fd088f0d1ae221fef276845ee38e1d  /tmp/o        
c1e844c09bbf39bb09ff25c024379ae935fd088f0d1ae221fef276845ee38e1d  /boot/uImage
root@NAS# flash_erase /dev/mtd3 0 0
root@NAS# nandwrite -p /dev/mtd3 /boot/uInitramfs
root@NAS# dd if=/dev/mtd3 of=/tmp/o bs=`wc -c /boot/uInitramfs | cut -d' ' -f1` count=1
1+0 records in
1+0 records out
2768752 bytes (2.8 MB) copied, 0.596774 s, 4.6 MB/s
root@hal# sha256sum /tmp/o /boot/uInitramfs
365d726d4d098d370b65f6d3295c3f08360939213bc4884c83d1c849ae6113ab  /tmp/o        
365d726d4d098d370b65f6d3295c3f08360939213bc4884c83d1c849ae6113ab  /boot/uInitramfs
  • Changements de u-boot

La fin est proche !
Il ne reste plus qu’à redémarrer le NAS, ouvrir la console de uBoot via le BootWait, et l’informer de la partition sur laquel est le système. Dans mon ca, /dev/mapper/mvg-slash.

Marvell>> setenv bootargs root=/dev/mapper/mvg-slash console=ttyS0,115200 earlyprintk rootdelay=10
Marvell>> saveenv
Marvell>> boot

Voilà, l’environnement Debian est installé sur un kernel 4.6.8!

  • Installation de Openmediavault

L’installation du système d’administration du NAS est simple, et très bien décrite là http://forum.openmediavault.org/index.php/Thread/5302-Howto-install-OpenMediaVault-on-Debian-7-x-Wheezy/

echo "deb http://packages.openmediavault.org/public stoneburner main" > /etc/apt/sources.list.d/openmediavault.list
apt-get update
# Note: You will get a warning that the PGP Key can't be found. Thats fine.
apt-get install openmediavault-keyring postfix
# Note: You will get a warning that the package 'openmediavault-keyring' can't be authenticated. You're fine to ignore that warning and install it anyways.
apt-get update
apt-get install openmediavault
omv-initsystem
shutdown -r now

Une fois fait, écrivez l’IP du nas dans votre naviguateur.
Utilisateur: admin
Password: openmediavault

Pour le reste, je vous laisse la lourde tâche de choisir parmis les nombreux tutos expliquants la configuration d’OMV.

Taggé , , , .Mettre en favori le Permaliens.

6 réponses à ReadyNas DUO v2: Debian & OpenMediaVault

  1. Pawel Dembicki dit :

    It is possible to run Debian on ReadyNAS V2 without compiling the kernel. It is possible to use stock debian images. Example for Buster:

    wget http://cdn-fastly.deb.debian.org/debian/dists/buster/main/installer-armel/current/images/kirkwood/netboot/marvell/guruplug/uInitrd
    wget http://cdn-fastly.deb.debian.org/debian/dists/buster/main/installer-armel/current/images/kirkwood/device-tree/kirkwood-netgear_readynas_duo_v2.dtb
    wget http://cdn-fastly.deb.debian.org/debian/dists/buster/main/installer-armel/current/images/kirkwood/netboot/vmlinuz-4.19.0-11-marvell
    cat kirkwood-netgear_readynas_duo_v2.dtb >> vmlinuz-4.19.0-11-marvell
    mkimage -A arm -T kernel -C none -a 8000 -e 00008000 -n “Debian kernel” -d vmlinuz-4.19.0-11-marvell uImage

  2. Wizhack dit :

    Salut, merci pour l’article une petite question cependant penses tu que c’est applicable pour un debian 9 et omv 4?

  3. Maik dit :

    hi have found your genius way to start a debian kernel on the readynas can you send my new links to the files ?

Répondre à Christian Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *