In one of my first posts I referred to the fact that I am running this wordpress blog on a SheevaPlug (more details about this server here). Below is a rather lengthy post with my notes about setting up this server
The Sheeva Plug Experience
0. Connected USB from Sheeva to PC. PC found new hardware after a while. Needed CD to install drivers. After, open Device Manager in Control panel to check which COM port the sheeva is reachable over. Then used putty to make the serial connection over that port… worked
1. My very first step was to program the sheeva to boot from an external USB flash disk. To this end I essentially followed the guide here:
http://computingplugs.com/index.php/Booting_entirely_off_an_external_USB_device
As a summary:
Plugged in the USB hub
Plugged in the USB flash drive
ran dmesg to see which device the USB was now loaded on (/dev/sda)
formatted the usb drive using fdisk to have 3 partitions:
Disk /dev/sda: 8021 MB, 8021606400 bytes
5 heads, 32 sectors/track, 97920 cylinders
Units = cylinders of 160 * 512 = 81920 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 1 27 2144 83 Linux (ext2)
/dev/sda2 28 97635 7808640 83 Linux (ext3)
/dev/sda3 97636 97920 22800 83 Linux (swap)
once partitioned, formatted the partitions mkfs.ext3 and mkfs.ext2 and mkswap
Created mount points:
mkdir /mnt/mtdroot mkdir /mnt/sda1 mkdir /mnt/sda2
Mounted the partitions and internal NAND flash:
mount /dev/mtdblock1 /mnt/mtdroot mount /dev/sda1 /mnt/sda1 mount /dev/sda2 /mnt/sda2
Copied internal filesystem from NAND to external USB drive:
cp -av /mnt/mtdroot/. /mnt/sda2 cp -a /dev /mnt/sda2
Copied kernal from the provided CD to the boot parition:
cp uImage /mnt/sda1
Edited fstab so that kernel loaded from sda1
rootfs / rootfs rw 0 0
replaced with:
/dev/sda2 / ext3 rw 0 0 /dev/sda1 /boot ext2 rw 0 0
edited Uboot to use USB:
Backup of the boot arguments so that it is easy to go back if it doesn’t work. Type the following at the Marvell prompt:
setenv bootargs_nand $(bootargs) setenv bootcmd_nand $(bootcmd) saveenv
Then, write the new arguments to boot from the external storage:
setenv bootargs 'console=ttyS0,115200 root=/dev/sda2 rootdelay=10 mtdparts=nand_mtd:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw'
setenv bootcmd 'usb start; ext2load usb 0:1 0x8000000 uImage; bootm 0x8000000; reset' saveenv (or boot to try once)
2. Fixed the apt-get problem (basically due to space problems the designers wipe apt-get packages to save space):
edit the file /etc/fstab and comment out the follow line with a #:
tmpfs /var/cache/apt tmpfs defaults,noatime
Reboot the system for the changes to take effect. The system would not mount /var/cache/apt as tmpfs anymore and now you can create the archives directory with:
mkdir -p /var/cache/apt/archives/partial
3. Fixed networking:
/etc/network/interfaces:
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0
# dhcp example
#auto eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.100.50
netmask 255.255.255.0
gateway 192.168.100.100
4. Installed mysql server:
apt-get install mysql-server
Had some problems with root password (do not use !! in password), so had to uninstall (apt-get remove mysql-server) and reinstall along with dpkg-configure mysql-server
5. Installed apache and PHP:
sudo apt-get install apache2 sudo apt-get install php5 libapache2-mod-php5 php5-mysql
restart apache (/etc/init.d/apache2 restart)
make php work with mysql, open file /etc/php5/apache2/php.ini
Uncomment the following line by taking out the semicolon (;).
Change this line:
;extension=mysql.so
More info, especially the SSL part:
https://help.ubuntu.com/6.06/ubuntu/serverguide/C/httpd.html
6. Installed proftpd
7. Wrote quick script to change hostname (because proftpd wasnt starting) and edited resolv.conf to contain correct hostnames. Also starts proftpd automatically
To write the startup script example:
Write a script. put it in the /etc/init.d/ directory.
Lets say you called it FOO. You then run
update-rc.d FOO defaults
You also have to make the file you created, FOO, executable, using
chmod +x FOO
8. Install BIND
to allow forwarding in the named.conf.options add:
allow-query { any; };
9. Installed SAMBA
published a fileshare:
nano -w /etc/samba/smb.conf
enabled the WINS server part (uncommented the line).
enabled security=user changed workgroup variable uncommented interfaces variable
added the following in the section:
#======================= Share Definitions ======================= #Dave's FTP root share [ftproot] comment = Dave FTP Root Folder read only = no browseable = no create mask = 777 directory mask = 777 guest ok = no path = /var/ftproot
added an SMB password for my user:
smbpasswd -a username
restarted the service /etc/init.d/samba restart
10. Implemented disk space monitoring because not enough space to be comfortable
– Installed sendEmail (apt-get sendemail)
– made new directory in /var/
– defined diskmonitor.script
df / > diskusage
myvar=$(awk -F” ” ‘/[-9]+[0-9]/ {print $3}’ diskusage)
if [ $myvar -ge 5208476 ];
then
sendEmail -f sheeva@ddilittleitaly.com -t dvas0004@o2.co.uk -u “DISK SPACE ALERT” -m “WARNING WARNING My disk space usage is over 80%” -s mail.02.net
else
echo “Disk Usage under control”>>/var/log/messages
fi
The above monitors disk space usage and emails me if goes over a threshold
– made diskmonitor.script executable:
chmod +x diskmonitor.script
– made a cronjob to schedule the above file diskmonitor.script:
crontab -e
added line:
# m h dom mon dow command * */5 * * * /var/scripts/diskmonitor.script
this will run my script every 5 hours
11. Configure mysql to use another location database:
http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location
12. Probably going to publish ssh access, so I want an “autoban” feature:
apt-get install denyhosts
then edit the config file: /etc/denyhosts.conf
also changed the ssh port and timeout from /etc/ssh/sshd_config
the timeout value is changed by adding the line: ClientAliveInterval 540