In questa sezione descriverò come installare Entware su un router (Asus RT-AC56U).
Innanzitutto quasi tutti i router di Asus integrano il gestore dei pacchetti
Optware.
Questo gestore di pacchetti è datato, tutti i pacchetti non vengono più
aggiornati. Per questa ragione, un nuovo gestore di pacchetti (Entware) è stato creato
al fine di rimpiazzare Optware. Sfortunatamente
Entware e Optware condividono alcune librerie, pertanto non
possiamo installarli contemporaneamente. Alcune funzionalità dei router Asus non
sono compatibili con i pacchetti Entware, ad esempio il "Media Server", "Asus AiCloud"
e "Download Master". Fintanto questi pacchetti sono incorporati nel
router,
essi sono ancora disponibili, invece se essi sono installati in una unità disco
esterna,
essi devono lavorare solo con Optware poiché non sono compatibili con Entware (non
possiamo mischiare le librerie di Entware con le librerie di Optware). Sebbene "Media Server" e
"Download Master" possono essere rimpiazzate da alcuni pacchetti di Entware
(ad esempio rispettivamente da "Minidlna" e "Transmission"), "Asus AiCloud"
non può essere direttamente rimpiazzato, pertanto dobbiamo considerare quanto
scritto sopra prima di effettuare l'aggiornamento ad Entware.
Il primo passo da effettuare per aggiornare ad Entware è installare un
pacchetto incorporato nel router, ad esempio "Download Master".
Useremo un'unità disco esterna (ad esempio una pennetta USB), la formattiamo
usando il file system ext2/ext3, la inseriamo nella presa USB del router, e
installiamo "Download Master". Dopo aver fatto questo, disinstalliamo "Download Master" (non
ne abbiamo più bisogno). In questa maniera il router
ha creato una cartella nell'unità disco esterna, il nome di questa cartella
dipende dal router che stiamo usando (ad esempio per il router RT-AC56U questa
cartella è denominata "asusware.arm"). Dopo aver fatto questo, apriamo
Telnet, andiamo nella cartella "/opt" ed eliminiamo tutti i file
inclusi in quella cartella, tranne il file ".asusrouter" poiché questo
file è usato dal router per montare la cartella "/opt". Ora la
cartella "/opt" è vuota (tranne che per il file ".asusrouter").
Adesso dobbiamo sapere l'esatta piattaforma Entware da usare, a seconda del router che abbiamo. Innanzitutto dobbiamo conoscere tutte le informazioni basilari del router :
root@RT-AC56U:/# uname -a Linux RT-AC56U 2.6.36.4brcmarm #19 SMP PREEMPT Wed Apr 19 16:20:58 CEST 2017 armv7l GNU/Linux
Nella seguente tabella possiamo sapere tutto il formato del risultato :
Risultato | Significato |
---|---|
Linux | Nome del Sistema Operativo |
RT-AC56U | Nome del dispositivo |
2.6.36.4brcmarm | Rilascio del Sistema Operativo |
#19 SMP PREEMPT Wed Apr 19 16:20:58 CEST 2017 | Versione del Sistema Operativo |
armv7l | Tipo di macchina (hardware) |
GNU/Linux | Sistema Operativo |
Brevemente possiamo conoscere l'attuale Tipo di Hardware tramite il seguente comando :
root@RT-AC56U:/# uname -m armv7l
Brevemente possiamo conoscere l'attuale Versione del Kernel tramite il seguente comando :
root@RT-AC56U:/# uname -r 2.6.36.4brcmarm
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 :
Sottocartella | Tipo di Hardware + Versione del Kernel |
---|---|
aarch64-k3.10 | armv8 (ARM 64 bit) - kernel 3.10 e successivo |
armv5sf-k3.2 | armv5 - kernel 3.2 e successivo |
armv7sf-k2.6 | armv7 - kernel 2.6.36 e successivo |
armv7sf-k3.2 | armv7 - kernel 3.2 e successivo |
mipselsf-k3.4 | mipsel - kernel 3.4 e successivo |
mipssf-k3.4 | mips - kernel 3.4 e successivo |
x64-k3.2 | x86_64 - kernel 3.2 e successivo |
x86-k2.6 | x86 - kernel 2.6 e successivo |
Una volta selezionata la sottocartella appropriata, dobbiamo selezionare la sottocartella "installer" e scaricare lo script "generic.sh". Ad esempio per il router Asus RT-AC56U selezioniamo la sottocartella "armv7sf-k2.6":
root@RT-AC56U:/# cd /tmp root@RT-AC56U:/tmp# wget http://bin.entware.net/armv7sf-k2.6/installer/generic.sh Connecting to bin.entware.net (104.27.177.50:80) generic.sh 100% |*********************************| 2205 0:00:00 ETA root@RT-AC56U:/tmp# chmod +x generic.sh
Dopo aver scaricato il suddetto script, lo andiamo ad eseguire. Ciò che segue è un esempio di risultato del suddetto script:
root@RT-AC56U:/tmp# ./generic.sh Info: Checking for prerequisites and creating folders... Warning: Folder /opt exists! Warning: If something goes wrong please clean /opt folder and try again. Info: Opkg package manager deployment... Connecting to pkg.entware.net (81.4.123.217:80) opkg 100% |**************************| 124k 0:00:00 ETA Connecting to pkg.entware.net (81.4.123.217:80) opkg.conf 100% |**************************| 142 0:00:00 ETA Connecting to pkg.entware.net (81.4.123.217:80) ld-2.23.so 100% |**************************| 139k 0:00:00 ETA Connecting to pkg.entware.net (81.4.123.217:80) libc-2.23.so 100% |**************************| 1198k 0:00:00 ETA Connecting to pkg.entware.net (81.4.123.217:80) libgcc_s.so.1 100% |**************************| 39632 0:00:00 ETA Info: Basic packages installation... Downloading http://pkg.entware.net/binaries/armv7/Packages.gz. Updated list of available packages in /opt/var/opkg-lists/packages. Installing entware-opt (222108-5) to root... Downloading http://pkg.entware.net/binaries/armv7/entware-opt_222108-5_armv7soft.ipk. Installing libc (2.23-6) to root... Downloading http://pkg.entware.net/binaries/armv7/libc_2.23-6_armv7soft.ipk. Installing libgcc (6.3.0-6) to root... Downloading http://pkg.entware.net/binaries/armv7/libgcc_6.3.0-6_armv7soft.ipk. Installing libssp (6.3.0-6) to root... Downloading http://pkg.entware.net/binaries/armv7/libssp_6.3.0-6_armv7soft.ipk. Installing librt (2.23-6) to root... Downloading http://pkg.entware.net/binaries/armv7/librt_2.23-6_armv7soft.ipk. Installing libpthread (2.23-6) to root... Downloading http://pkg.entware.net/binaries/armv7/libpthread_2.23-6_armv7soft.ipk. Installing libstdcpp (6.3.0-6) to root... Downloading http://pkg.entware.net/binaries/armv7/libstdcpp_6.3.0-6_armv7soft.ipk. Installing ldconfig (2.23-6) to root... Downloading http://pkg.entware.net/binaries/armv7/ldconfig_2.23-6_armv7soft.ipk. Installing findutils (4.6.0-1) to root... Downloading http://pkg.entware.net/binaries/armv7/findutils_4.6.0-1_armv7soft.ipk. Installing terminfo (6.0-1c) to root... Downloading http://pkg.entware.net/binaries/armv7/terminfo_6.0-1c_armv7soft.ipk. Installing locales (2.23-6) to root... Downloading http://pkg.entware.net/binaries/armv7/locales_2.23-6_armv7soft.ipk. Installing opkg (2011-04-08-9c97d5ec-17) to root... Downloading http://pkg.entware.net/binaries/armv7/opkg_2011-04-08-9c97d5ec-17_armv7soft.ipk. Configuring libgcc. Configuring libc. Configuring libssp. Configuring libpthread. Configuring librt. Configuring terminfo. Configuring ldconfig. 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_glib223.tar.gz You can add new locales to Entware using /opt/bin/localedef.new Configuring opkg. Configuring libstdcpp. Configuring findutils. Configuring entware-opt. Updating /opt/etc/ld.so.cache... done. Info: Congratulations! Info: If there are no errors above then Entware-ng 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-ng services to start Info: Found a Bug? Please report at https://github.com/Entware-ng/Entware-ng/issues
Noi possiamo usare il comando "opkg --help" per
controllare se abbiamo installato correttamente Entware sul router.
Se diamo uno sguardo al suddetto risultato, possiamo notare la linea "Info: Add
/opt/bin & /opt/sbin to your PATH variable". Non abbiamo bisogno di
aggiungere queste cartelle alla variabile PATH poiché queste cartelle vengono
automaticamente aggiunte alla variabile PATH dal router ogni qualvolta la
cartella "/opt" viene montata. Notiamo anche la linea "Info:
Add '/opt/etc/init.d/rc.unslung start' to startup script for Entware-ng services
to start". Questa linea deve essere considerata solo se vogliamo eseguire
uno script ogni qualvolta inseriamo l'unità disco esterna. Normalmente sui
router Asus i servizi vengono automaticamente attivati grazie ad alcune funzionalità di Optware, queste funzionalità permettono di eseguire i
servizi inclusi nella cartella "/opt/etc/init.d".
Sfortunatamente con Entware dobbiamo usare un altro metodo per eseguire
uno script automaticamente dopo il montaggio della cartella "/opt".
Fortunatamente il router include una chiave "nvram" la quale esegue
automaticamente uno script. Questa chiave è denominata "script_usbmount",
normalmente questa chiave è vuota. Ad esempio se vogliamo usare lo script "/opt/etc/autorun.sh",
dobbiamo eseguire i seguenti comandi:
nvram set script_usbmount=/opt/etc/autorun.sh
nvram commit
Per controllare i suddetti comandi, dobbiamo eseguire il seguente comando:
nvram show | grep -i autorun.sh
Il suddetto comando restituisce:
script_usbmount=/opt/etc/autorun.sh
All'interno del suddetto script "autorun.sh" possiamo attivare servizi (ricordarsi
che gli script dei servizi sono inclusi nella cartella "/opt/etc/init.d") oppure
eseguire altri script o comandi.
Esiste un'altra chiave "nvram" denominata "script_usbumount",
questa chiave è simile alla suddetta chiave "script_usbmount" ma il
suo valore è usato prima che l'unità disco esterna venga smontata, in questa
maniera possiamo fermare i servizi oppure eseguire altri script o comandi prima
che l'unità disco esterna venga rimossa.
Dopo aver installato Entware, possiamo installare tutti i pacchetti
necessari, per esempio se vogliamo installare l'editor "Nano", possiamo
usare il comando "opkg install nano".
Notare che il comando per Entware è "opkg", invece noi usavamo
il comando "ipkg" per
Optware. La sintassi del comando "opkg" è simile alla sintassi
del comando "ipkg", pertanto non c'è bisogno di ripartire da zero.
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 verrano 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@RT-AC56U:/tmp# opkg update Downloading http://bin.entware.net/armv7sf-k2.6/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*'