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
Justin G said:
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
valblant said:
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?
skor said:
I was able to get rid of the update-alternatives errors by:
ipkg install ipkg-opt
Andy said:
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/)
kimchikitchen said:
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?
valblant said:
>
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
crispysnoreloc said:
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.
Poiter said:
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.