Come installare Entware su un dispositivo NAS


In questa sezione descriverò come installare Entware su un dispositivo NAS (Synology DS412+).
Innanzitutto dobbiamo accedere al NAS tramite SSH o Telnet. Creiamo una nuova cartella sul "volume1" del primo disco (dove è installato il DSM di Synology), rimuoviamo la vecchia cartella "/opt" (nel seguente esempio la cartella "/opt" non esiste), e colleghiamo la cartella "/opt" alla nuova cartella appena creata :

root@DS412:~# mkdir -p /volume1/@entware/opt
root@DS412:~# rm -rf /opt
rm: cannot remove ‘/opt’: Device or resource busy
root@DS412:~# mkdir -p /opt
root@DS412:~# mount -o bind /volume1/@entware/opt /opt

Adesso dobbiamo sapere l'esatta piattaforma Entware da usare, a seconda del dispositivo NAS che abbiamo. Innanzitutto dobbiamo conoscere tutte le informazioni basilari del NAS :

root@DS412:~# uname -a
Linux DS412 3.10.35 #5967 SMP Fri Nov 3 17:20:59 CST 2017 x86_64 GNU/Linux synology_cedarview_412+

Nella seguente tabella possiamo sapere tutto il formato del risultato - per i dispositivi di Synology possiamo ottenere informazioni aggiuntive su questo sito web :

RisultatoSignificato
LinuxNome del Sistema Operativo
DS412Nome del dispositivo
3.10.35Rilascio del Sistema Operativo
#5967 SMP Fri Nov 3 17:20:59 CST 2017Versione del Sistema Operativo
x86_64Tipo di macchina (hardware)
GNU/LinuxSistema Operativo
synology_cedarview_412+Architettura Hardware di Synology

Brevemente possiamo conoscere l'attuale Tipo di Hardware tramite il seguente comando :

root@DS412:~# uname -m
x86_64

Brevemente possiamo conoscere l'attuale Versione del Kernel tramite il seguente comando :

root@DS412:~# uname -r
3.10.35

Quindi apriamo un browser, andiamo su questo sito web e troveremo alcune sottocartelle, dobbiamo scegliere una di queste sottocartelle allo scopo di installare Entware. Ciò che segue è l'elenco delle più importanti sottocartelle che possiamo trovare, state attenti a scegliere la sottocartella appropriata a seconda del suddetto risultato per Tipo di Hardware e Versione del Kernel :

SottocartellaTipo di Hardware + Versione del KernelArch pacchetto di Synology
aarch64-k3.10armv8 - kernel 3.10 e successivortd1296
armv5sf-k3.2armv5 - kernel 3.2 e successivo88f628x
armv7sf-k2.6armv7 - kernel 2.6.36 e successivo 
armv7sf-k3.2armv7 - kernel 3.2 e successivoArmada*, Alpine*, Comcerto*
mipselsf-k3.4mipsel - kernel 3.4 e successivo 
mipssf-k3.4mips - kernel 3.4 e successivo 
x64-k3.2x86_64 - kernel 3.2 e successivoTutti i modelli di CPU di Intel tranne X86

Per il dispositivo Synology DS412+ dobbiamo scegliere la sottocartella "x64-k3.2", quindi eseguiamo il seguente comando per installare Entware (invece dovete sostituire "x64-k3.2" con la vostra sottocartella) :

root@DS412:~# wget -O - http://bin.entware.net/x64-k3.2/installer/generic.sh | /bin/sh

--2018-06-06 10:56:50-- http://bin.entware.net/x64-k3.2/installer/generic.sh
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2208 (2.2K) [application/octet-stream]
Saving to: 'STDOUT'
Info: Checking for prerequisites and creating folders...
Warning: Folder /opt exists!
2018-06-06 10:56:50 (125 KB/s) - written to stdout [2208/2208]

Info: Opkg package manager deployment...
--2018-06-06 10:56:50-- http://bin.entware.net/x64-k3.2/installer/opkg
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 158016 (154K) [application/octet-stream]
Saving to: '/opt/bin/opkg'
2018-06-06 10:56:51 (796 KB/s) - '/opt/bin/opkg' saved [158016/158016]

--2018-06-06 10:56:51-- http://bin.entware.net/x64-k3.2/installer/opkg.conf
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 182 [application/octet-stream]
Saving to: '/opt/etc/opkg.conf'
2018-06-06 10:56:51 (9.48 KB/s) - '/opt/etc/opkg.conf' saved [182/182]

--2018-06-06 10:56:51-- http://bin.entware.net/x64-k3.2/installer/ld-2.27.so
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 157488 (154K) [application/octet-stream]
Saving to: '/opt/lib/ld-2.27.so'
2018-06-06 10:56:51 (662 KB/s) - '/opt/lib/ld-2.27.so' saved [157488/157488]

--2018-06-06 10:56:51-- http://bin.entware.net/x64-k3.2/installer/libc-2.27.so
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1759664 (1.7M) [application/octet-stream]
Saving to: '/opt/lib/libc-2.27.so'
2018-06-06 10:56:52 (1.65 MB/s) - '/opt/lib/libc-2.27.so' saved [1759664/1759664]

--2018-06-06 10:56:52-- http://bin.entware.net/x64-k3.2/installer/libgcc_s.so.1
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 92560 (90K) [application/octet-stream]
Saving to: '/opt/lib/libgcc_s.so.1'

--2018-06-06 10:56:53-- http://bin.entware.net/x64-k3.2/installer/libpthread-2.27.so
Resolving bin.entware.net... 81.4.123.217
Connecting to bin.entware.net|81.4.123.217|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 106152 (104K) [application/octet-stream]
Saving to: '/opt/lib/libpthread-2.27.so'

2018-06-06 10:56:53 (734 KB/s) - '/opt/lib/libpthread-2.27.so' saved [106152/106152]

Info: Basic packages installation...
Downloading http://bin.entware.net/x64-k3.2/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/entware
Installing entware-opt (227000-3) to root...
Downloading http://bin.entware.net/x64-k3.2/entware-opt_227000-3_all.ipk
Installing libc (2.27-8) to root...
Downloading http://bin.entware.net/x64-k3.2/libc_2.27-8_x64-3.2.ipk
Installing libgcc (7.3.0-8) to root...
Downloading http://bin.entware.net/x64-k3.2/libgcc_7.3.0-8_x64-3.2.ipk
Installing libssp (7.3.0-8) to root...
Downloading http://bin.entware.net/x64-k3.2/libssp_7.3.0-8_x64-3.2.ipk
Installing librt (2.27-8) to root...
Downloading http://bin.entware.net/x64-k3.2/librt_2.27-8_x64-3.2.ipk
Installing libpthread (2.27-8) to root...
Downloading http://bin.entware.net/x64-k3.2/libpthread_2.27-8_x64-3.2.ipk
Installing libstdcpp (7.3.0-8) to root...
Downloading http://bin.entware.net/x64-k3.2/libstdcpp_7.3.0-8_x64-3.2.ipk
Installing entware-release (1.0-2) to root...
Downloading http://bin.entware.net/x64-k3.2/entware-release_1.0-2_all.ipk
Installing zoneinfo-asia (2018e-1) to root...
Downloading http://bin.entware.net/x64-k3.2/zoneinfo-asia_2018e-1_x64-3.2.ipk
Installing zoneinfo-europe (2018e-1) to root...
Downloading http://bin.entware.net/x64-k3.2/zoneinfo-europe_2018e-1_x64-3.2.ipk
Installing findutils (4.6.0-1) to root...
Downloading http://bin.entware.net/x64-k3.2/findutils_4.6.0-1_x64-3.2.ipk
Installing terminfo (6.1-1) to root...
Downloading http://bin.entware.net/x64-k3.2/terminfo_6.1-1_x64-3.2.ipk
Installing locales (2.27-8) to root...
Downloading http://bin.entware.net/x64-k3.2/locales_2.27-8_x64-3.2.ipk
Installing grep (2.26-1) to root...
Downloading http://bin.entware.net/x64-k3.2/grep_2.26-1_x64-3.2.ipk
Installing libpcre (8.41-2) to root...
Downloading http://bin.entware.net/x64-k3.2/libpcre_8.41-2_x64-3.2.ipk
Installing opkg (2011-04-08-9c97d5ec-17b) to root...
Downloading http://bin.entware.net/x64-k3.2/opkg_2011-04-08-9c97d5ec-17b_x64-3.2.ipk
Installing entware-upgrade (1.0-1) to root...
Downloading http://bin.entware.net/x64-k3.2/entware-upgrade_1.0-1_all.ipk
Configuring libgcc.
Configuring libc.
Configuring libssp.
Configuring libpthread.
Configuring librt.
Configuring terminfo.
Configuring libpcre.
Configuring grep.
Configuring locales.
Entware uses separate locale-archive file independent from main system
Creating locale archive - /opt/usr/lib/locale/locale-archive
Adding en_EN.UTF-8
Adding ru_RU.UTF-8
You can download locale sources from http://pkg.entware.net/sources/i18n_glib227.tar.gz
You can add new locales to Entware using /opt/bin/localedef.new
Configuring entware-upgrade.
Upgrade operations are not required
Configuring opkg.
Configuring zoneinfo-europe.
Configuring zoneinfo-asia.
Configuring libstdcpp.
Configuring entware-release.
Configuring findutils.
Configuring entware-opt.
Info: Congratulations!
Info: If there are no errors above then Entware was successfully initialized.
Info: Add /opt/bin & /opt/sbin to your PATH variable
Info: Add '/opt/etc/init.d/rc.unslung start' to startup script for Entware services to start
Info: Found a Bug? Please report at https://github.com/Entware/Entware/issues

Ora dobbiamo creare uno script che il nostro NAS deve eseguire ogni qualvolta esso viene riavviato.
Innanzitutto dobbiamo creare il seguente file "/etc/rc.entware" :

#! /bin/sh

if test -z "${REAL_OPT_DIR}"; then
   REAL_OPT_DIR=/volume1/@entware/opt
fi

case "$1" in
     start)
          echo "Starting Entware."
          if test -n "${REAL_OPT_DIR}"; then
               if ! grep ' /opt ' /proc/mounts >/dev/null 2>&1 ; then
                    mkdir -p /opt
                    mount -o bind ${REAL_OPT_DIR} /opt
                    /opt/etc/init.d/rc.unslung start
               fi
          fi
     ;;
     reconfig)
          true
     ;;
     stop)
          echo "Shutting down Entware."
          true
     ;;
     *)
          echo "Usage: $0 {start|stop|reconfig}"
          exit 1
esac

exit 0

Nel suddetto file, la linea "/opt/etc/init.d/rc.unslung start" è richiesta per avviare automaticamente i servizi di Entware. Se non volete avviare automaticamente i servizi di Entware, potete rimuovere quella linea. Eventualmente al posto di quella linea, potete inserire manualmente i servizi che devono essere eseguiti durante l'avvio del NAS.
In seguito aggiungiamo la seguente linea al file "/etc/rc.local" - se questo file non esiste, allora lo creiamo :

#!/bin/sh

[ -x /etc/rc.entware ] && /etc/rc.entware start

exit 0

Adesso dobbiamo aggiungere le cartelle "/opt/bin" e "/opt/sbin" alla fine della variabile di ambiente PATH, usando uno dei file "/root/.profile" o "/etc/profile" ("/etc/profile" per il DSM6), ciò che segue è un esempio di linea PATH :

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/opt/bin:/opt/sbin
export PATH

Cortesemente non aggiungete le suddette cartelle all'inizio della linea PATH per evitare problemi al dispositivo NAS. Ricordatevi che Entware è soltanto un ambiente aggiuntivo per il NAS, pertanto è meglio lasciare che il NAS possa trovare i suoi stessi file all'interno delle cartelle PATH prima delle cartelle di Entware.
Cortesemente riavviate il dispositivo NAS al fine di provare le modifiche effettuate.
Dopo il riavvio del dispositivo NAS, possiamo installare tutti i pacchetti di cui abbiamo bisogno, ad esempio se vogliamo installare l'editor "Nano", possiamo usare il comando "opkg install nano".

root@DS412:~# opkg install nano
Installing nano (2.9.6-1) to root...
Downloading http://bin.entware.net/x64-k3.2/nano_2.9.6-1_x64-3.2.ipk
Installing libncursesw (6.1-1) to root...
Downloading http://bin.entware.net/x64-k3.2/libncursesw_6.1-1_x64-3.2.ipk
Installing zlib (1.2.11-2) to root...
Downloading http://bin.entware.net/x64-k3.2/zlib_1.2.11-2_x64-3.2.ipk
Installing file (5.25-2) to root...
Downloading http://bin.entware.net/x64-k3.2/file_5.25-2_x64-3.2.ipk
Installing libmagic (5.25-2) to root...
Downloading http://bin.entware.net/x64-k3.2/libmagic_5.25-2_x64-3.2.ipk
Configuring libncursesw.
Configuring zlib.
Configuring libmagic.
Configuring file.
Configuring nano.

Per aggiornare tutti i pacchetti useremo i due comandi "opkg update" e "opkg upgrade" (il primo comando aggiorna la sorgente Internet dei pacchetti, il secondo aggiorna solo i pacchetti aggiornati). Dobbiamo fare attenzione ad aggiornare i pacchetti, poiché mi è capitato in passato che alcuni file di configurazione (da me modificati) siano stati sovrascritti dai file di configurazione predefiniti. Il mio suggerimento è di effettuare una copia di riserva di tutta la cartella "/opt" prima di aggiornare i pacchetti (ma anche periodicamente allo scopo di avere una copia di riserva dell'installazione Entware ogni qualvolta abbiamo bisogno di ripristinare alcuni file).
Un altro mio suggerimento è quello di usare il parametro "--noaction" con il comando "opkg upgrade", in questa maniera possiamo vedere una simulazione (verifica) della procedura di aggiornamento, proprio per sapere in anticipo quali pacchetti verranno aggiornati, quali file verranno sovrascritti e se c'è qualcosa che possiamo fare in anticipo allo scopo di avere un ambiente Entware completamente funzionante dopo aver aggiornato i pacchetti.

Ciò che segue è un esempio di risultato del comando "opkg update":

root@DS412:~# opkg update

Downloading http://bin.entware.net/x64-k3.2/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/entware

Ciò che segue è un esempio di risultato del comando "opkg --help":

root@RT-AC56U:/tmp# opkg --help

usage: opkg [options...] sub-command [arguments...]
where sub-command is one of:

Package Manipulation:
	update 		 	Update list of available packages
	upgrade 	 	Upgrade installed packages
	install <pkgs> 	 	Install package(s)
	configure <pkgs> 	Configure unpacked package(s)
	remove <pkgs|regexp> 	Remove package(s)
	flag <flag> <pkgs> 	Flag package(s)
	 <flag>=hold|noprune|user|ok|installed|unpacked (one per invocation)

Informational Commands:
	list			List available packages
	list-installed 		List installed packages
	list-upgradable 	List installed and upgradable packages
	list-changed-conffiles 	List user modified configuration files
	files <pkg> 		List files belonging to <pkg>
	search <file|regexp> 	List package providing <file>
	find <regexp> 		List packages whose name or description matches <regexp>
	info [pkg|regexp] 	Display all info for <pkg>
	status [pkg|regexp] 	Display all status for <pkg>
	download <pkg> 		Download <pkg> to current directory
	compare-versions 	<v1> <op> <v2>
				compare versions using <= < > >= = << >>
	print-architecture 	List installable package architectures
	depends [-A] [pkgname|pat]+
	whatdepends [-A] [pkgname|pat]+
	whatdependsrec [-A] [pkgname|pat]+
	whatrecommends[-A] [pkgname|pat]+
	whatsuggests[-A] [pkgname|pat]+
	whatprovides [-A] [pkgname|pat]+
	whatconflicts [-A] [pkgname|pat]+
	whatreplaces [-A] [pkgname|pat]+

Options:
	-A 			Query all packages not just those installed
	-V[<level>] 		Set verbosity level to <level>.
	--verbosity[=<level>] 	Verbosity levels:
					0 errors only
					1 normal messages (default)
					2 informative messages
					3 debug
					4 debug level 2
	-f <conf_file> 		Use <conf_file> as the opkg configuration file
	--conf <conf_file>
	--cache <directory> 	Use a package cache
	-d <dest_name> 		Use <dest_name> as the the root directory for
	--dest <dest_name> 	package installation, removal, upgrading.
				<dest_name> should be a defined dest name from
				the configuration file, (but can also be a
				directory name in a pinch).
	-o <dir> 		 Use <dir> as the root directory for
	--offline-root <dir> 	 offline installation of packages.
	--add-arch <arch>:<prio> Register architecture with given priority
	--add-dest <name>:<path> Register destination with given path
	
Force Options:
	--force-depends		Install/remove despite failed dependencies
	--force-maintainer	Overwrite preexisting config files
	--force-reinstall	Reinstall package(s)
	--force-overwrite	Overwrite files from other package(s)
	--force-downgrade	Allow opkg to downgrade packages
	--force-space		Disable free space checks
	--force-postinstall	Run postinstall scripts even in offline mode
	--force-remove		Remove package even if prerm script fails
	--force-checksum	Don't fail on checksum mismatches
	--noaction		No action -- test only
	--download-only		No action -- download only
	--nodeps		Do not follow dependencies
	--nocase		Perform case insensitive pattern matching
	--size			Print package size when listing available packages
	--force-removal-of-dependent-packages
				Remove package and all dependencies
	--autoremove		Remove packages that were installed
				automatically to satisfy dependencies
	-t			Specify tmp-dir.
	--tmp-dir		Specify tmp-dir.
	-l			Specify lists-dir.
	--lists-dir		Specify lists-dir.

 regexp could be something like 'pkgname*' '*file*' or similar
 e.g. opkg info 'libstd*' or opkg search '*libop*' or opkg remove 'libncur*'