In this section I describe how to install Entware on a NAS device (Synology DS412+).
Firstly we access the NAS via SSH or Telnet. We create a new folder on "volume1"
of the first disk (where Synology's DSM is installed), we remove the old "/opt" folder
(in following example "/opt" folder does not exist), and
we link the "/opt" folder to the new created folder :
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
Now we have to know the correct Entware's platform to use, according to NAS device we have. Firstly we have to know all the basics informations of 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+
In the following table we can know all the output's form - for Synology devices we can have additional informations on this website :
Output | Meaning |
---|---|
Linux | Operating System's name |
DS412 | Host's name |
3.10.35 | Operating System's release |
#5967 SMP Fri Nov 3 17:20:59 CST 2017 | Operating System's version |
x86_64 | The machine (hardware) type |
GNU/Linux | Operating System |
synology_cedarview_412+ | Synology's Hardware Architecture |
Briefly we can know the current Hardware Type with following command line :
root@DS412:~# uname -m x86_64
Briefly we can know the current Kernel version with following command line :
root@DS412:~# uname -r 3.10.35
Then we open a browser, we go to this website and we find some subfolders, we have to choose one of those folders in order to install Entware. This is the list of the most important subfolders we can have, please be careful to choose the proper subfolder according to above-mentioned output for Hardware Type and Kernel version :
Subfolder | Hardware Type + Kernel version | Synology's Package Arch |
---|---|---|
aarch64-k3.10 | armv8 - kernel 3.10 and higher | rtd1296 |
armv5sf-k3.2 | armv5 - kernel 3.2 and higher | 88f628x |
armv7sf-k2.6 | armv7 - kernel 2.6.36 and higher | |
armv7sf-k3.2 | armv7 - kernel 3.2 and higher | Armada*, Alpine*, Comcerto* |
mipselsf-k3.4 | mipsel - kernel 3.4 and higher | |
mipssf-k3.4 | mips - kernel 3.4 and higher | |
x64-k3.2 | x86_64 - kernel 3.2 and higher | All Intel CPU Models except X86 |
For device Synology DS412+ we have to choose "x64-k3.2" subfolder, so we execute the following command line in order to install Entware (instead you have to replace "x64-k3.2" with your subfolder) :
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
Now we have to create a script that our NAS must execute
whenever it is restarted.
Firstly we must create the following 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
In the above-mentioned file, the line "/opt/etc/init.d/rc.unslung
start" is required to automatically start the Entware services. If you do not
want to automatically start the Entware services, you can remove that line.
Eventually instead of that line, you can manually insert the services to be started during boot.
Then we add the following single line to file "/etc/rc.local" - if
this file does not exist, we create it :
#!/bin/sh [ -x /etc/rc.entware ] && /etc/rc.entware start exit 0
Now we have to add the folders "/opt/bin" and "/opt/sbin" at the end of the PATH environment variable, using one of the files "/root/.profile" or "/etc/profile" ("/etc/profile" for DSM6), this is an example of PATH line:
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
Please do not add the above-mentioned folders at the
beginning of the PATH line to avoid any problems for NAS device. Remember
that Entware is just an additional environment for the NAS, so it is better to
let NAS find its own files inside the standard PATH folders before Entware folders.
Please reboot the NAS device so to test all the changes you have done.
After rebooting the NAS device, we can install all the Entware packages we need, for example
if we want to install "Nano" editor, we can use the command "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.
To update all packages we will use the two commands "opkg update" and
"opkg upgrade" (the first command updates the Internet
source of packages, the second one upgrades only the updated packages).
We need to take care about the upgrade of packages, because it is happened to me
in the past that some configurations files (changed by me) were overwritten by
the default configuration files. My suggestion is to make a backup of all "/opt"
folder before upgrading the packages (but also periodically in order to have a
backup copy of Entware installation whenever we need to restore
some files).
Another my suggestion is to use the parameter "--noaction" with
the command "opkg upgrade", in this way we may see a simulation
(testing) of the upgrading procedure, just to know in advance which packages
will be upgraded, which files will
be overwritten and if there is something we have to do in advance in order to have a
full-functional Entware environment after upgrading the packages.
This is a sample output of command "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
This is a sample output of command "opkg --help":
root@DS412:~# 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*'