Tags
This article will explain how to install a MySQL server on the Lenovo ix2-dl NAS. It will also demonstrate how to customize the boot process.
This MySQL server will be set up as the back-end for my MediaWiki installation running on a different server.
Enable SSH Access
https://n1njahacks.wordpress.com/2014/02/25/ssh-access-to-lenovo-ix2-dl-nas/
Basic Config
Add the following to /etc/profile:
alias ls='ls --color' # Set the locale properly export LANG=en_US.utf8 export LANGUAGE=en_US:en
The locale settings were necessary to properly display Russian file names from a Terminal.
Custom Boot Scripts
One of the difficulties with this box is that it does not respect the startup scripts in /etc/rc* directories, even though they are there. Instead boot processes are managed by appmd, which uses an XML config file found here: /usr/local/cfg/sohoProcs.xml. Unfortunately, you can’t modify that file directly.
The /usr directory is actually part of the /boot/images/apps image mounted on /mnt/apps, so if we want to add anything to the startup config, we must modify the image itself.
Here are some scripts to help with that:
/opt/editconfig.sh:
#!/bin/sh # edit the bootup config of the ix2 # inspired by http://www.chrispont.co.uk/2010/10/allow-startup-daemons-on-storcenter-ix2-200-nas/ # modified from http://techmonks.net/installing-transmission-and-dnsmasq-on-a-nas/ mknod -m0660 /dev/loop3 b 7 3 chown root.disk /dev/loop3 mkdir /tmp/apps mount -o loop /boot/images/apps /tmp/apps vi /tmp/apps/usr/local/cfg/sohoProcs.xml sleep 1 umount /tmp/apps rm /dev/loop3
/opt/init-opt.sh:
#!/bin/sh # modified from http://techmonks.net/installing-transmission-and-dnsmasq-on-a-nas/ rm /opt/init-opt.log echo "Last bootup:" >> /opt/init-opt.log date >> /opt/init-opt.log #Add your command below /etc/init.d/rc.local start >> /opt/init-opt.log while true; do sleep 1d done
After creating these scripts, you must run /opt/editconfig.sh and make modifications to the opened file. At the end of <Group Level="2"> section:
<Group Level="2"> ..... Other Program defs ..... <Program Name="CustomInitScript" Path="sh"> <Args>/opt/init-opt.sh</Args> <SysOption Restart="-1"/> </Program> </Group>
After these modifications, you can place all your startup scripts into /etc/rc.local, which will be executed after you reboot.
svcd Performance Tweak
svcd is some sort of indexing service that tends to take up a lot of CPU. We can renice it though.
Since we now have access to sohoProcs.xml (see previous section), we can set the Nice level in there.
Run /opt/editconfig.sh, find the entry for svcd and add the Nice attribute:
<Program Disable="0" Name="Svcd" Path="/usr/local/svcd/svcd"> <SysOption MaxMem="96M" Nice="19" Restart="-1"/> </Program>
Connecting to package (ipkg) repositories
LifeLine Linux distro in this NAS is based on NSLU2-Linux, so we can make use of their resources.
Open /etc/ipkg.conf and add the following:
src cross http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable src native http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/native/unstable
root@ix2-dl:/# ipkg update
MySQL Installation
root@ix2-dl:/# ipkg install mysql5
This will install MySQL and dependencies into /opt (aka /mnt/system/opt), but the permissions will be wrong so the server won’t start after installation. You need to follow these steps:
- Add mysql user through the Web Console
- Fix permissions
root@ix2-dl:/# chmod o+w /opt/var root@ix2-dl:/# chown -R mysql /opt/mysql-test root@ix2-dl:/# chown -R mysql /opt/var/mysql
- In /etc/passwd change home directory for ‘mysql’ user to /opt/var/mysql
- Setup environment
root@ix2-dl:/# su - mysql mysql@ix2-dl:/# vi .bashrc
Add the following:
export PATH=$PATH:/opt/bin
- Start MySQL. As root:
root@ix2-dl:/# /opt/share/mysql/mysql.server start Starting MySQL..
- Configure the server. Follow the wizard and change the root password.
root@ix2-dl:/# su - mysql mysql@ix2-dl:/# /opt/bin/mysql_secure_installation
- Log in:
root@ix2-dl:/# su - mysql mysql@ix2-dl:/# mysql -u root -p Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.0.88 optware distribution 5.0.88-1 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | lib | | log | | mysql | | test | +--------------------+ 5 rows in set (0.00 sec)
- To start the server on reboot, open /etc/rc.local and add:
# Start MySQL server /opt/share/mysql/mysql.server start
Note: This last step will only work if you followed instruction in the “Custom Boot Scripts” section.
You are done!
Importing the Wiki Database
mysql@ix2-dl:/# mysql -u root -p mysql> create database wikidb; mysql> CREATE USER 'wiki'@'%' IDENTIFIED BY '********'; mysql> GRANT ALL PRIVILEGES ON wikidb.* TO 'wiki'@'%';
mysql@ix2-dl:/# mysql -u wiki -p wikidb < wikidb-db-backup.sql
Daily Backups of the Wiki Database
The wiki database is backed up and versioned with RCS daily. Here is the setup:
- Install RCS:
root@ix2-dl:/# ipkg install rcs
- Backup script (/opt/var/mysql/mysqlbackup.cron.sh):
#!/bin/bash # DATABASE DEFINITION SECTION # Database specified with a "dbname user password" triple databases=("wikidb wiki ******") # END DATABASE DEFINITION SECTION WD="/nfs/backups/wiki" MYSQLDUMP="/opt/bin/mysqldump" CI="/opt/bin/ci" AWK="/usr/bin/awk" numdb=${#databases[@]} cd $WD for database in "${databases[@]}"; do db=$(echo $database | $AWK '{print $1}') user=$(echo $database | $AWK '{print $2}') pass=$(echo $database | $AWK '{print $3}') filename=${db}-db-backup.sql echo "Backing up database $db..." $MYSQLDUMP -u $user --password=$pass $db > $filename 2> MY_SQL_DUMP_ERROR_$db if [[ $? -ne 0 ]] ; then # The backup has failed. Send a notification e-mail # echo "WIKI BACKUP FAILURE!" else # Success. Delete the error file if any and check in the new backup into RCS # echo "Creating an RCS version for $db..." rm MY_SQL_DUMP_ERROR_$db 2>&1 > /dev/null export TMPDIR=$WD echo . | $CI -l -d"`date`" $filename fi done
Cron Job
/etc/cron.daily/mysql_backup:
#!/bin/sh /opt/var/mysql/mysqlbackup.cron.sh
Credits
http://vincesoft.blogspot.ca/2012/01/how-to-run-program-at-boot-on-iomega.html
http://iomega.nas-central.org/wiki/Hacking_(Home_Media_CE)
http://www.nslu2-linux.org/
http://techmonks.net/installing-transmission-and-dnsmasq-on-a-nas/
Pingback: Secure NFS Shares on Lenovo ix2-dl NAS | N1nja Hacks
Hello, thanks for this tutorial. I’ve added the repositories to the ipkg config, however I’m getting an error when trying to install anything. Any help would be appreciated!
Paste:
https://paste.aseriesoftubez.com/p/1406584456-By13Q.html
Hi Justin,
I get the error about missing ‘/opt/bin/update-alternatives’ as well, but it is not a critical failure. In my case the package still installs, even with that error.
Are you sure that your package did not get installed?
I was able to get rid of the update-alternatives errors by:
ipkg install ipkg-opt
Thank you for the tutorial. I am trying to figure out how to install not only MySQL, but also Zabbix Server on my ix2-dl for network monitoring. Would you being able to post a tutorial on how to setup Zabbix on this NAS? (http://www.zabbix.com/)
Great Tutorial! worked perfectly. Have you ever tried installing PHP in the Lenovo ix2 also? I tried “ipkg install php” but it fails at the end of the install. Now that mysql is running I would love to get PHP working also. Any suggestions?
>
Fails with what error?
I just tried it and it worked for me. There were some errors in the end, b/c /opt/bin/update-alternatives is not installed, but it’s not that important, and php is still usable. You can fix those errors by installing
ipkg install ipkg-opt
Hello Valblant,
Thanks for making these awesome tutorials!
I have been trying to follow along but i get errors when entering commands like some in the comment section.
When i ran:
“ipkg install ipkg-opt”
it returns:
“Nothing to be done
An error ocurred, return value: 4.
Collected errors:
Cannot find package ipkg-opt.
Check the spelling or perhaps run ‘ipkg update’”
Then i ran “ipkg update”
which returned this:
“Successfully terminated.”
I ran these all as root by the way.
Is there any way to fix these errors?
Thanks.
Hey, is there anyway to install a fresh copy of linux (any flavour) i dont need it as a nas anymore but want to use it as a linux server and teach myself linux.