Difference between revisions of "Install Debian 6.0 (Squeeze) On Buffalo Linkstation Mini"

From NAS-Central Buffalo - The Linkstation Wiki
Jump to: navigation, search
m (Changed reboot command)
(Replaced content with " Not ready yet.")
Line 1: Line 1:
{{Template:Articles|LS-WSGL/R1|Debian|Squeeze}}
 
  
{{Brick|These instructions may void your warranty. Proceed at your own risk.}}
+
Not ready yet.
 
+
[[Image:LS_WSGL.jpg|thumb|right|Linkstation Mini]]
+
 
+
__TOC__
+
 
+
== Overview ==
+
The following process converts a [[:Category:LS-WSGL/R1|Buffalo Linkstation Mini]] (model LS-WSxxxxGL/R1) into a fully functional [http://www.gnu.org/gnu/linux-and-gnu.html GNU/Linux] server running [http://en.wikipedia.org/wiki/Debian Debian] version 6.0.1a (Squeeze) with the [http://en.wikipedia.org/wiki/Linux_kernel Linux] kernel (version 2.6.32-31).
+
Here is how the process works:
+
# Use ACP Commander software to establish Telnet session with device
+
# Uncouple secondary drive partitions from existing RAID configuration
+
# Partition and format secondary drive, install Debian 6.0, and prepare for initial boot
+
# Reboot device, establish SSH session with device, and complete installation
+
 
+
== Requirements ==
+
# Buffalo LinkStation Mini models LS-WSxxxxGL/R1 running stock firmware ('''LS-WSXxxxxTL/R1 models will not work''')
+
#* If your device has already been modified to run another operating system and/or firmware, you should [[Revert Buffalo Linkstation Mini To Stock Firmware| revert to stock firmware]]
+
#* This process was tested with model LS-WS1.0TGL/R1, but other models may work as well
+
# Ubuntu 10.04 Desktop Edition CD-ROM (download and burn [http://releases.ubuntu.com/lucid/ubuntu-10.04.2-desktop-i386.iso this disc image])
+
# Computer which can boot the Ubuntu 10.04 Desktop Edition CD-ROM and access the network successfully (most modern computers meet this requirement)
+
 
+
== Instructions ==
+
<b>
+
Note: Do not attempt to execute the following commands as a single script.
+
Instead, copy and paste each block of commands into a shell window and monitor the resulting output for errors
+
</b>
+
 
+
<ol>
+
=== Prepare Device ===
+
<li> Disconnect power cable from device
+
<li> Disconnect all USB devices (and keep them disconnected for the duration of this process)
+
<li> Move device switch to "on" position
+
<li> Attach device to network
+
<li> Connect power cable to device
+
<li> Wait for device to finish booting (no blinking lights)
+
 
+
<li> Open device web interface (factory default address is [http://192.168.11.150 http://192.168.11.150], or use the IP address assigned by your network)
+
<li> Login (user = admin, password = password)
+
</li>
+
 
+
{{Warning|<b>The next step will erase all data on your Linkstation Mini.  It is recommended that you backup your existing data. Proceed at your own risk.</b>}}
+
<li> Remove existing RAID configuration (Disk Management | RAID Setup | RAID Array 1 | Change RAID Array ...)
+
<li> Create new RAID1 (mirroring) array (Disk Management | RAID Setup | RAID Array 1 | RAID Mode: RAID1 ...)
+
<li> Wait for "Building RAID Array" to complete</li>
+
'''You may proceed immediately after the array has been built (you do not need to wait for the drive check to complete)'''
+
 
+
<li> Boot Ubuntu 10.04 Desktop Edition CD-ROM on computer
+
<li> Select language as desired (English)
+
<li> Click on "Try Ubuntu 10.04 LTS" (to use Ubuntu without making any changes to your system)
+
 
+
<li> Open a new terminal window (Applications | Accessories | Terminal )
+
<li> Start a new bash shell with root privileges
+
<pre>
+
sudo bash
+
</pre>
+
</li>
+
 
+
<li> Install OpenJDK (for running ACP Commander software)
+
<pre>
+
apt-get update
+
apt-get -q -y install openjdk-6-jre
+
</pre>
+
</li>
+
 
+
<li> Download ACP Commander software (acp_commander.jar)
+
<pre>
+
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/acp_commander.jar
+
</pre>
+
</li>
+
 
+
<li> Determine IP address of device and assign it to environment variable (substitute appropriate IP address)
+
<pre>
+
IP_ADDRESS=192.168.11.150
+
</pre>
+
</li>
+
 
+
<li> Instruct device to enable Telnet and remove root password
+
<pre>
+
java -jar acp_commander.jar -t ${IP_ADDRESS} -o
+
</pre>
+
</li>
+
 
+
<li> Establish Telnet session with device
+
<pre>
+
telnet ${IP_ADDRESS}
+
</pre>
+
</li>
+
 
+
<li> Login as root (no password required)
+
 
+
<li> Set recent date and time (prevent error messages about file dates, format=MMDDhhnnYYYY)
+
<pre>
+
date 050900002011
+
</pre>
+
</li>
+
 
+
<li> Kill all unnecessary processes
+
<pre>
+
kill -9 $(ps | grep -vE '\[.*\]|(init)|(syslogd)|(klogd)|(getty)|(telnetd)|(-sh)|(ps)|(VmSize)|(grep)|(kill)|(awk)' | awk '{print $1}')
+
</pre>
+
</li>
+
 
+
{{Warning|<b>Your device will no longer boot after the next step.  You must complete the installation of the Debian operating system before your device will boot again.</b>}}
+
<li> Free secondary drive (/dev/sdb) partitions from RAID configuration
+
<pre>
+
mdadm --manage /dev/md0  --fail /dev/sdb1
+
mdadm --manage /dev/md1  --fail /dev/sdb2
+
mdadm --manage /dev/md10 --fail /dev/sdb5
+
mdadm --manage /dev/md2  --fail /dev/sdb6
+
 
+
mdadm --manage /dev/md0  --remove /dev/sdb1
+
mdadm --manage /dev/md1  --remove /dev/sdb2
+
mdadm --manage /dev/md10 --remove /dev/sdb5
+
mdadm --manage /dev/md2  --remove /dev/sdb6
+
</pre>
+
</li>
+
 
+
<li> Make sure secondary drive is not in use
+
<pre>
+
if hdparm -z /dev/sdb ; then echo; echo "SECONDARY DRIVE READY (/dev/sdb)"; echo; else grep sdb /proc/mounts /proc/mdstat; echo "Please check that /dev/sdb is not in use"; fi;
+
</pre>
+
</li>
+
 
+
'''The following commands will delete all existing partitions on the secondary drive and reconfigure it as follows...'''
+
{|border=1 cellspacing=0 cellpadding=4
+
|-
+
!Partition
+
!Mount
+
!Size
+
!Type
+
!Description
+
|-
+
|1
+
|/boot
+
|128MB
+
|fd
+
|linux raid autodetect
+
|-
+
|2
+
|swap
+
|256MB
+
|82
+
|linux swap
+
|-
+
|3
+
|/ (root)
+
|12GB
+
|fd
+
|linux raid autodetect
+
|-
+
|4
+
|/srv
+
|100%
+
|fd
+
|linux raid autodetect
+
|}
+
 
+
<li> Repartition secondary drive (substitute partition sizes as desired)
+
<pre>
+
PARTITION1_SIZE=128MB
+
PARTITION2_SIZE=256MB
+
PARTITION3_SIZE=12GB
+
echo -e "d\n1\nd\n2\nd\n3\nd\n4\nn\np\n1\n\n+${PARTITION1_SIZE}\nn\np\n2\n\n+${PARTITION2_SIZE}\nn\np\n3\n\n+${PARTITION3_SIZE}\nn\np\n\n\nt\n1\nfd\nt\n2\n82\nt\n3\nfd\nt\n4\nfd\nw\n" | fdisk /dev/sdb
+
</pre>
+
</li>
+
 
+
<li> Create and activate swap partition
+
<pre>
+
mkswap /dev/sdb2
+
swapon /dev/sdb2
+
</pre>
+
</li>
+
 
+
<li> Create RAID volumes
+
<pre>
+
echo "y" | mdadm --create --verbose /dev/md11 --level=1 --raid-devices=2 missing /dev/sdb1
+
echo "y" | mdadm --create --verbose /dev/md13 --level=1 --raid-devices=2 missing /dev/sdb3
+
echo "y" | mdadm --create --verbose /dev/md14 --level=1 --raid-devices=2 missing /dev/sdb4
+
</pre>
+
</li>
+
 
+
<li> Format RAID volumes
+
<pre>
+
mkfs.ext3 -F /dev/md11
+
mkfs.ext3 -F /dev/md13
+
mkfs.ext3 -F /dev/md14
+
</pre>
+
</li>
+
 
+
<li> Mount RAID volumes
+
<pre>
+
mkdir -p                /mnt/lsmini
+
mount -t ext3 /dev/md13 /mnt/lsmini
+
mkdir -p                /mnt/lsmini/boot
+
mount -t ext3 /dev/md11 /mnt/lsmini/boot
+
mkdir -p                /mnt/lsmini/srv
+
mount -t ext3 /dev/md14 /mnt/lsmini/srv
+
</pre>
+
</li>
+
 
+
 
+
=== Install Debian System ===
+
 
+
<li> Install root filesystem (from archive of debootstrap stage 2 files)
+
<pre>
+
cd /mnt/lsmini
+
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/6.0/bootstrap-debian-6.0.1a-armel-stage2.tar.gz
+
tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/bootstrap-debian-6.0.1a-armel-stage2.tar.gz
+
</pre>
+
</li>
+
 
+
<li> Install custom kernel (Debian 6.0 kernel 2.6.32-31)
+
<pre>
+
cd /mnt/lsmini
+
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/6.0/kernel-2.6.32-31-debian-lsmini.tar.gz
+
tar --extract --verbose --same-permissions --gzip --file kernel-2.6.32-31-debian-lsmini.tar.gz
+
</pre>
+
</li>
+
 
+
<li> Install custom boot loader (force boot from /dev/md13)
+
<pre>
+
cd /mnt/lsmini
+
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/initrd-md13-armv5tejl-softfloat-1.0.tar.gz
+
tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/initrd-md13-armv5tejl-softfloat-1.0.tar.gz
+
</pre>
+
</li>
+
 
+
<li> Prepare host settings (adjust host name and IP addresses as needed)
+
<pre>
+
HOST_NAME=lsmini
+
HOST_ADDRESS=192.168.1.77
+
HOST_NETMASK=255.255.255.0
+
HOST_GATEWAY=192.168.1.1
+
</pre>
+
</li>
+
 
+
<li> Configure network interface (/etc/network/interfaces)
+
<pre>
+
echo "# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or"  >/mnt/lsmini/etc/network/interfaces
+
echo "# /usr/share/doc/ifupdown/examples for more information."          >>/mnt/lsmini/etc/network/interfaces
+
echo "#"                        >>/mnt/lsmini/etc/network/interfaces
+
echo "auto lo eth0"            >>/mnt/lsmini/etc/network/interfaces
+
echo "iface lo inet loopback"  >>/mnt/lsmini/etc/network/interfaces
+
echo "iface eth0 inet static"  >>/mnt/lsmini/etc/network/interfaces
+
echo " address ${HOST_ADDRESS}" >>/mnt/lsmini/etc/network/interfaces
+
echo " netmask ${HOST_NETMASK}" >>/mnt/lsmini/etc/network/interfaces
+
echo " gateway ${HOST_GATEWAY}" >>/mnt/lsmini/etc/network/interfaces
+
rm -f /mnt/lsmini/etc/udev/rules.d/[0-9]*-persistent-net.rules  # remove all persistent network devices (force auto detection of eth0)
+
 
+
</pre>
+
</li>
+
 
+
<li> Configure host name (/etc/hostname)
+
<pre>
+
echo "${HOST_NAME}" >/mnt/lsmini/etc/hostname
+
</pre>
+
</li>
+
 
+
<li> Configure mapping from address to host name (/etc/hosts)
+
<pre>
+
echo "127.0.0.1 localhost"          >/mnt/lsmini/etc/hosts
+
echo "${HOST_ADDRESS} ${HOST_NAME}" >>/mnt/lsmini/etc/hosts
+
</pre>
+
</li>
+
 
+
{{Warning|<b>Do not modify the last column of /etc/fstab... any value other than zero will cause the device to hang on startup.  Basically, the system fails to detect the RAID volumes, sends the failure message to the console, waits for keyboard input (that can never arrive), and cannot respond to pings or any other network traffic.  Don't find out the hard way.</b>}}
+
<li> Configure mount points (/etc/fstab)
+
<pre>
+
echo "/dev/sdb2  none      swap  sw,pri=1                    0  0"  >/mnt/lsmini/etc/fstab
+
echo "/dev/md13  /        ext3  noatime                      0  0" >>/mnt/lsmini/etc/fstab
+
echo "/dev/md11  /boot    ext3  noatime                      0  0" >>/mnt/lsmini/etc/fstab
+
echo "/dev/md14  /srv      ext3  noatime                      0  0" >>/mnt/lsmini/etc/fstab
+
echo "shm        /dev/shm  tmpfs  noatime,nodev,nosuid,noexec  0  0" >>/mnt/lsmini/etc/fstab
+
</pre>
+
</li>
+
 
+
<li> Configure network name resolution (/etc/resolv.conf)
+
<pre>
+
cp -a /etc/resolv.conf /mnt/lsmini/etc/resolv.conf
+
</pre>
+
</li>
+
 
+
<li> Change root password (new password = lsmini)
+
<pre>
+
SED_FILE='/mnt/lsmini/etc/shadow'
+
SED_SEARCH='^\s*root\:\*?\:'
+
SED_REPLACE='root:$6$bmlbpJYn$xAgZr6KxoRLjDcPZNDBcnMF52gZrU7xkib43LhSlAvzVS4OqmiHaxB0GInPtoaPQ2FguHQQuxM95cMfvUnYn31:'
+
sed -r "s/${SED_SEARCH}/${SED_REPLACE}/" -i ${SED_FILE}
+
</pre>
+
</li>
+
 
+
<li> Prepare for reboot (Overwrite factory-installed boot files with custom ones)
+
<pre>
+
cd /mnt/lsmini
+
rm -rf /boot/*
+
cp -a /mnt/lsmini/boot/* /boot/
+
</pre>
+
</li>
+
 
+
<li> Wait for RAID synchronization to complete
+
<pre>
+
while egrep -iq '(recovery)|(resync)' /proc/mdstat; do
+
    clear
+
    cat /proc/mdstat
+
    sleep 5
+
done
+
clear
+
cat /proc/mdstat
+
sync
+
</pre>
+
</li>
+
 
+
<li> Unmount RAID volumes
+
<pre>
+
sync
+
cd /mnt
+
umount /mnt/lsmini/boot
+
umount /mnt/lsmini/srv
+
umount /mnt/lsmini
+
</pre>
+
</li>
+
 
+
<li> Reboot device
+
<pre>
+
reboot
+
</pre>
+
</li>
+
 
+
 
+
=== Configure Debian System ===
+
 
+
<li> Wait for device to finish booting (no blinking lights)
+
 
+
<li> Assign new IP address to environment variable
+
<pre>
+
IP_ADDRESS=192.168.1.77
+
</pre>
+
</li>
+
 
+
<li> Use SSH to login as root (password = lsmini)
+
<pre>
+
ssh root@${IP_ADDRESS}
+
</pre>
+
</li>
+
 
+
<li> Change root password to something hard to guess
+
<pre>
+
passwd root
+
</pre>
+
</li>
+
 
+
<li> Select timezone
+
<pre>
+
dpkg-reconfigure tzdata
+
</pre>
+
</li>
+
 
+
<li> Ensure that date and time are correct
+
<pre>
+
date
+
</pre>
+
</li>
+
 
+
<li> Make sure primary drive is not in use (/dev/sda)
+
<pre>
+
if hdparm -z /dev/sda ; then echo; echo "PRIMARY DRIVE READY (/dev/sda)"; echo; else grep sda /proc/mounts /proc/mdstat; echo "Please check that /dev/sda is not in use"; fi;
+
</pre>
+
</li>
+
 
+
<li> Repartition primary drive ('''must have same partition sizes as secondary drive''')
+
<pre>
+
PARTITION1_SIZE=128MB
+
PARTITION2_SIZE=256MB
+
PARTITION3_SIZE=12GB
+
echo -e "d\n1\nd\n2\nd\n3\nd\n4\nn\np\n1\n\n+${PARTITION1_SIZE}\nn\np\n2\n\n+${PARTITION2_SIZE}\nn\np\n3\n\n+${PARTITION3_SIZE}\nn\np\n\n\nt\n1\nfd\nt\n2\n82\nt\n3\nfd\nt\n4\nfd\nw\n" | fdisk /dev/sda
+
</pre>
+
</li>
+
 
+
<li> Format and activate swap partition on primary drive
+
<pre>
+
mkswap /dev/sda2
+
swapon /dev/sda2
+
</pre>
+
</li>
+
 
+
<li> Automatically mount swap partition at boot
+
<pre>
+
echo  "/dev/sda2  none      swap  sw,pri=2                    0  0"  >>/etc/fstab
+
</pre>
+
</li>
+
 
+
<li> Add primary drive partitions to RAID volumes (/dev/md11, /dev/md13, and /dev/md14)
+
<pre>
+
echo "y" | mdadm --manage /dev/md11 --add /dev/sda1
+
echo "y" | mdadm --manage /dev/md13 --add /dev/sda3
+
echo "y" | mdadm --manage /dev/md14 --add /dev/sda4
+
</pre>
+
</li>
+
 
+
<li> Disable login terminals (prevent error messages in /var/log/syslog every 5 minutes about /sbin/getty respawning too fast)
+
<pre>
+
SED_FILE='/etc/inittab'
+
SED_SEARCH='(^\s*[0-9]+\:[0-9]+\:respawn\:\/sbin\/getty\s+[0-9]+\s+tty[0-9]+\s*$)'
+
SED_REPLACE='#\1'
+
sed -r "s~${SED_SEARCH}~${SED_REPLACE}~g" -i ${SED_FILE}
+
</pre>
+
</li>
+
 
+
<li> Configure package sources (/etc/apt/sources.list)
+
<pre>
+
echo "deb    http://ftp.debian.org      lenny        main contrib"  >/etc/apt/sources.list
+
echo "deb-src http://ftp.debian.org      lenny        main contrib" >>/etc/apt/sources.list
+
echo "deb    http://security.debian.org lenny/updates main contrib" >>/etc/apt/sources.list
+
echo "deb-src http://security.debian.org lenny/updates main contrib" >>/etc/apt/sources.list
+
</pre>
+
</li>
+
 
+
<li> Update package lists
+
<pre>
+
apt-get update
+
</pre>
+
</li>
+
 
+
<li> Wait for RAID synchronization to complete
+
<pre>
+
while egrep -iq '(recovery)|(resync)' /proc/mdstat; do
+
    clear
+
    cat /proc/mdstat
+
    sleep 5
+
done
+
clear
+
cat /proc/mdstat
+
sync
+
</pre>
+
</li>
+
 
+
<li> Restart device
+
<pre>
+
reboot
+
</pre>
+
</li>
+
 
+
'''Congratulations!  You should now have a working Debian 6.0 server running on a Buffalo Linkstation Mini.'''
+
 
+
 
+
=== Extras ===
+
<li> Allow USB flash drives formatted with the VFAT file system (Windows) to be mounted automatically in /media/usb
+
<pre>
+
SED_FILE='/etc/usbmount/usbmount.conf'
+
SED_SEARCH='^(\s*FILESYSTEMS\s*=\s*\")(.*)(\"\s*)$'
+
SED_REPLACE='\1\2 vfat\3'
+
if ! grep '^\s*FILESYSTEMS\s*=\s*.*(\s+|\")vfat(\s+|\").*$' "${SED_FILE}"; then sed -r "s~${SED_SEARCH}~${SED_REPLACE}~g" -i ${SED_FILE}; fi
+
 
+
</pre>
+
</li>
+
 
+
<li> Add user (never login as root again, use sudo command instead)
+
<pre>
+
USER_NAME=visitor
+
adduser ${USER_NAME}
+
 
+
</pre>
+
</li>
+
 
+
<li> Allow user to become super user (using sudo command)
+
<pre>
+
echo "${USER_NAME}    ALL=(ALL) ALL" >>/etc/sudoers
+
 
+
</pre>
+
</li>
+
 
+
</ol>
+
 
+
== See Also ==
+
* [[Revert Buffalo Linkstation Mini To Stock Firmware]]
+
* [[Install_Debian_5.0_(Lenny)_On_Buffalo_Linkstation_Mini|Install Debian 5.0 (Squeeze) On Linkstation Mini]]
+
* [[Install_Ubuntu_9.04_(Jaunty_Jackalope)_On_Buffalo_Linkstation_Mini|Install Ubuntu 9.04 On Linkstation Mini]]
+
* [[LS_Mini:_Install_Gentoo|Install Gentoo On Linkstation Mini]]
+
* [[GenLink for ARM9]]
+
 
+
== References ==
+
* [http://www.debian.org Debian website]
+
* [http://www.debian-administration.org/articles/426 Installing new Debian systems using debootstrap]
+
* [http://buffalo-nas-hacking.googlecode.com Custom initrd which boots from /dev/md13]
+

Revision as of 02:33, 10 May 2011

Not ready yet.