Difference between revisions of "Install Debian 5.0 (Lenny) On Buffalo Linkstation Mini"
Rpinchbeck (Talk | contribs) m (Cosmetic fixes, moved user stuff to extras) |
Rpinchbeck (Talk | contribs) m (Cosmetic changes) |
||
(26 intermediate revisions by 2 users not shown) | |||
Line 6: | Line 6: | ||
__TOC__ | __TOC__ | ||
+ | |||
+ | {{Warning|This procedure is for installing an older release of Debian. <ul><li><b>It is highly recommended that users [[Install_Debian_On_Buffalo_Linkstation_Mini|install the latest release of Debian]].</b></li></ul>}} | ||
+ | |||
== Overview == | == 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 5.0.6 (Lenny) with the backported [http://en.wikipedia.org/wiki/Linux_kernel Linux] kernel (version 2.6.32- | + | 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 5.0.6 (Lenny) with the backported [http://en.wikipedia.org/wiki/Linux_kernel Linux] kernel (version 2.6.32-27). |
+ | '''No disassembly required.''' | ||
+ | Both [http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1 RAID1 (Mirroring)] and [http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0 RAID0 (Striping)] configurations are supported. | ||
Here is how the process works: | Here is how the process works: | ||
# Use ACP Commander software to establish Telnet session with device | # Use ACP Commander software to establish Telnet session with device | ||
Line 14: | Line 19: | ||
# Partition and format secondary drive, install Debian 5.0, and prepare for initial boot | # Partition and format secondary drive, install Debian 5.0, and prepare for initial boot | ||
# Reboot device, establish SSH session with device, and complete installation | # Reboot device, establish SSH session with device, and complete installation | ||
+ | |||
== Requirements == | == Requirements == | ||
Line 19: | Line 25: | ||
#* 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]] | #* 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 | #* 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-desktop-i386.iso this disc image]) | + | # 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) | # Computer which can boot the Ubuntu 10.04 Desktop Edition CD-ROM and access the network successfully (most modern computers meet this requirement) | ||
+ | |||
== Instructions == | == Instructions == | ||
Line 37: | Line 44: | ||
<li> Wait for device to finish booting (no blinking lights) | <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 | + | <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> Login (user = admin, password = password) | ||
</li> | </li> | ||
Line 55: | Line 62: | ||
<pre> | <pre> | ||
sudo bash | sudo bash | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Install OpenJDK (for running ACP Commander software) | <li> Install OpenJDK (for running ACP Commander software) | ||
Line 61: | Line 70: | ||
apt-get update | apt-get update | ||
apt-get -q -y install openjdk-6-jre | apt-get -q -y install openjdk-6-jre | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Download ACP Commander software (acp_commander.jar) | <li> Download ACP Commander software (acp_commander.jar) | ||
<pre> | <pre> | ||
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/acp_commander.jar | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/acp_commander.jar | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Determine IP address of device and assign it to environment variable (substitute appropriate IP address) | <li> Determine IP address of device and assign it to environment variable (substitute appropriate IP address) | ||
<pre> | <pre> | ||
− | + | IP_ADDRESS=192.168.11.150 | |
+ | |||
</pre> | </pre> | ||
+ | </li> | ||
<li> Instruct device to enable Telnet and remove root password | <li> Instruct device to enable Telnet and remove root password | ||
<pre> | <pre> | ||
java -jar acp_commander.jar -t ${IP_ADDRESS} -o | java -jar acp_commander.jar -t ${IP_ADDRESS} -o | ||
+ | |||
</pre> | </pre> | ||
+ | </li> | ||
<li> Establish Telnet session with device | <li> Establish Telnet session with device | ||
<pre> | <pre> | ||
telnet ${IP_ADDRESS} | telnet ${IP_ADDRESS} | ||
+ | |||
</pre> | </pre> | ||
+ | </li> | ||
<li> Login as root (no password required) | <li> Login as root (no password required) | ||
Line 87: | Line 106: | ||
<li> Set recent date and time (prevent error messages about file dates, format=MMDDhhnnYYYY) | <li> Set recent date and time (prevent error messages about file dates, format=MMDDhhnnYYYY) | ||
<pre> | <pre> | ||
− | date | + | date 050900002011 |
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Kill all unnecessary processes | <li> Kill all unnecessary processes | ||
<pre> | <pre> | ||
kill -9 $(ps | grep -vE '\[.*\]|(init)|(syslogd)|(klogd)|(getty)|(telnetd)|(-sh)|(ps)|(VmSize)|(grep)|(kill)|(awk)' | awk '{print $1}') | kill -9 $(ps | grep -vE '\[.*\]|(init)|(syslogd)|(klogd)|(getty)|(telnetd)|(-sh)|(ps)|(VmSize)|(grep)|(kill)|(awk)' | awk '{print $1}') | ||
+ | |||
+ | </pre> | ||
+ | </li> | ||
+ | |||
+ | <li> Disable all active swap paritions | ||
+ | <pre> | ||
+ | swapoff -a | ||
+ | |||
</pre> | </pre> | ||
</li> | </li> | ||
Line 108: | Line 137: | ||
mdadm --manage /dev/md10 --remove /dev/sdb5 | mdadm --manage /dev/md10 --remove /dev/sdb5 | ||
mdadm --manage /dev/md2 --remove /dev/sdb6 | mdadm --manage /dev/md2 --remove /dev/sdb6 | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Make sure secondary drive is not in use | <li> Make sure secondary drive is not in use | ||
<pre> | <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; | 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> | + | |
+ | </pre> | ||
</li> | </li> | ||
Line 156: | Line 188: | ||
PARTITION3_SIZE=12GB | 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 | 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> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Create and activate swap partition | <li> Create and activate swap partition | ||
Line 162: | Line 196: | ||
mkswap /dev/sdb2 | mkswap /dev/sdb2 | ||
swapon /dev/sdb2 | swapon /dev/sdb2 | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Create RAID volumes | <li> Create RAID volumes | ||
Line 168: | Line 204: | ||
echo "y" | mdadm --create --verbose /dev/md11 --level=1 --raid-devices=2 missing /dev/sdb1 | 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/md13 --level=1 --raid-devices=2 missing /dev/sdb3 | ||
− | + | ||
− | </ | + | </pre> |
+ | </li> | ||
<li> Format RAID volumes | <li> Format RAID volumes | ||
Line 175: | Line 212: | ||
mkfs.ext3 -F /dev/md11 | mkfs.ext3 -F /dev/md11 | ||
mkfs.ext3 -F /dev/md13 | mkfs.ext3 -F /dev/md13 | ||
− | + | ||
− | </pre> | + | </pre> |
+ | </li> | ||
+ | |||
+ | |||
+ | === Install Debian System === | ||
<li> Mount RAID volumes | <li> Mount RAID volumes | ||
Line 184: | Line 225: | ||
mkdir -p /mnt/lsmini/boot | mkdir -p /mnt/lsmini/boot | ||
mount -t ext3 /dev/md11 /mnt/lsmini/boot | mount -t ext3 /dev/md11 /mnt/lsmini/boot | ||
− | |||
− | |||
− | |||
+ | </pre> | ||
+ | </li> | ||
− | + | <li> Install custom boot loader (force boot from /dev/md13) | |
− | + | ||
− | <li> Install | + | |
<pre> | <pre> | ||
cd /mnt/lsmini | cd /mnt/lsmini | ||
− | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/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/ | + | tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/initrd-md13-armv5tejl-softfloat-1.0.tar.gz |
− | + | ||
− | <li> Install custom kernel (Debian 5.0 backported kernel 2.6.32- | + | </pre> |
+ | </li> | ||
+ | |||
+ | <li> Install custom kernel (Debian 5.0 backported kernel 2.6.32-27) | ||
<pre> | <pre> | ||
cd /mnt/lsmini | cd /mnt/lsmini | ||
− | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/5.0/kernel-2.6.32- | + | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/5.0/kernel-2.6.32-27-debian-lsmini.tar.gz |
− | tar --extract --verbose --same-permissions --gzip --file kernel-2.6.32- | + | tar --extract --verbose --same-permissions --gzip --file kernel-2.6.32-27-debian-lsmini.tar.gz |
− | + | ||
− | <li> Install | + | </pre> |
+ | </li> | ||
+ | |||
+ | <li> Install root filesystem (from archive of debootstrap stage 2 files) | ||
<pre> | <pre> | ||
cd /mnt/lsmini | cd /mnt/lsmini | ||
− | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/ | + | wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/5.0/bootstrap-debian-5.0.6-armel-stage2.tar.gz |
− | tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/ | + | tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/bootstrap-debian-5.0.6-armel-stage2.tar.gz |
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Prepare host settings (adjust host name and IP addresses as needed) | <li> Prepare host settings (adjust host name and IP addresses as needed) | ||
<pre> | <pre> | ||
− | + | HOST_NAME=lsmini | |
− | + | HOST_ADDRESS=192.168.1.77 | |
− | + | HOST_NETMASK=255.255.255.0 | |
− | + | HOST_GATEWAY=192.168.1.1 | |
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Configure network interface (/etc/network/interfaces) | <li> Configure network interface (/etc/network/interfaces) | ||
Line 232: | Line 278: | ||
echo " gateway ${HOST_GATEWAY}" >>/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) | rm -f /mnt/lsmini/etc/udev/rules.d/[0-9]*-persistent-net.rules # remove all persistent network devices (force auto detection of eth0) | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Configure host name (/etc/hostname) | <li> Configure host name (/etc/hostname) | ||
<pre> | <pre> | ||
echo "${HOST_NAME}" >/mnt/lsmini/etc/hostname | echo "${HOST_NAME}" >/mnt/lsmini/etc/hostname | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Configure mapping from address to host name (/etc/hosts) | <li> Configure mapping from address to host name (/etc/hosts) | ||
Line 243: | Line 293: | ||
echo "127.0.0.1 localhost" >/mnt/lsmini/etc/hosts | echo "127.0.0.1 localhost" >/mnt/lsmini/etc/hosts | ||
echo "${HOST_ADDRESS} ${HOST_NAME}" >>/mnt/lsmini/etc/hosts | echo "${HOST_ADDRESS} ${HOST_NAME}" >>/mnt/lsmini/etc/hosts | ||
− | </pre> | + | |
+ | </pre> | ||
</li> | </li> | ||
Line 250: | Line 301: | ||
<pre> | <pre> | ||
echo "/dev/sdb2 none swap sw,pri=1 0 0" >/mnt/lsmini/etc/fstab | echo "/dev/sdb2 none swap sw,pri=1 0 0" >/mnt/lsmini/etc/fstab | ||
− | echo "/dev/md13 / ext3 noatime | + | echo "/dev/md13 / ext3 noatime 0 0" >>/mnt/lsmini/etc/fstab |
− | echo "/dev/md11 /boot ext3 noatime | + | echo "/dev/md11 /boot ext3 noatime 0 0" >>/mnt/lsmini/etc/fstab |
− | echo " | + | echo "none /dev/shm tmpfs noatime,nodev,nosuid,noexec 0 0" >>/mnt/lsmini/etc/fstab |
− | + | ||
− | </pre> | + | </pre> |
+ | </li> | ||
<li> Configure network name resolution (/etc/resolv.conf) | <li> Configure network name resolution (/etc/resolv.conf) | ||
<pre> | <pre> | ||
cp -a /etc/resolv.conf /mnt/lsmini/etc/resolv.conf | cp -a /etc/resolv.conf /mnt/lsmini/etc/resolv.conf | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Change root password (new password = lsmini) | <li> Change root password (new password = lsmini) | ||
<pre> | <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} | sed -r "s/${SED_SEARCH}/${SED_REPLACE}/" -i ${SED_FILE} | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Prepare for reboot (Overwrite factory-installed boot files with custom ones) | <li> Prepare for reboot (Overwrite factory-installed boot files with custom ones) | ||
Line 274: | Line 330: | ||
rm -rf /boot/* | rm -rf /boot/* | ||
cp -a /mnt/lsmini/boot/* /boot/ | cp -a /mnt/lsmini/boot/* /boot/ | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Wait for RAID synchronization to complete | <li> Wait for RAID synchronization to complete | ||
Line 286: | Line 344: | ||
cat /proc/mdstat | cat /proc/mdstat | ||
sync | sync | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Unmount RAID volumes | <li> Unmount RAID volumes | ||
Line 293: | Line 353: | ||
cd /mnt | cd /mnt | ||
umount /mnt/lsmini/boot | umount /mnt/lsmini/boot | ||
− | |||
umount /mnt/lsmini | umount /mnt/lsmini | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Reboot device | <li> Reboot device | ||
<pre> | <pre> | ||
− | reboot; logout | + | sync; reboot; logout |
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
Line 309: | Line 372: | ||
<li> Assign new IP address to environment variable | <li> Assign new IP address to environment variable | ||
<pre> | <pre> | ||
− | + | IP_ADDRESS=192.168.1.77 | |
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Use SSH to login as root (password = lsmini) | <li> Use SSH to login as root (password = lsmini) | ||
<pre> | <pre> | ||
ssh root@${IP_ADDRESS} | ssh root@${IP_ADDRESS} | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Change root password to something hard to guess | <li> Change root password to something hard to guess | ||
<pre> | <pre> | ||
passwd root | passwd root | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Select timezone | <li> Select timezone | ||
<pre> | <pre> | ||
dpkg-reconfigure tzdata | dpkg-reconfigure tzdata | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Ensure that date and time are correct | <li> Ensure that date and time are correct | ||
<pre> | <pre> | ||
date | date | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Make sure primary drive is not in use (/dev/sda) | <li> Make sure primary drive is not in use (/dev/sda) | ||
<pre> | <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; | 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> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Repartition primary drive ('''must have same partition sizes as secondary drive''') | <li> Repartition primary drive ('''must have same partition sizes as secondary drive''') | ||
Line 343: | Line 418: | ||
PARTITION3_SIZE=12GB | 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 | 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> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Format and activate swap partition on primary drive | <li> Format and activate swap partition on primary drive | ||
Line 349: | Line 426: | ||
mkswap /dev/sda2 | mkswap /dev/sda2 | ||
swapon /dev/sda2 | swapon /dev/sda2 | ||
− | |||
− | <li> Automatically mount swap partition | + | </pre> |
+ | </li> | ||
+ | |||
+ | <li> Automatically mount swap partition during boot | ||
<pre> | <pre> | ||
echo "/dev/sda2 none swap sw,pri=2 0 0" >>/etc/fstab | echo "/dev/sda2 none swap sw,pri=2 0 0" >>/etc/fstab | ||
− | |||
− | <li> Add primary drive partitions to RAID volumes (/dev/md11 | + | </pre> |
+ | </li> | ||
+ | |||
+ | <li> Add primary drive partitions to RAID volumes (/dev/md11 and /dev/md13) | ||
<pre> | <pre> | ||
echo "y" | mdadm --manage /dev/md11 --add /dev/sda1 | echo "y" | mdadm --manage /dev/md11 --add /dev/sda1 | ||
echo "y" | mdadm --manage /dev/md13 --add /dev/sda3 | echo "y" | mdadm --manage /dev/md13 --add /dev/sda3 | ||
− | echo "y" | mdadm -- | + | |
+ | </pre> | ||
+ | </li> | ||
+ | |||
+ | <li> Create large RAID volume on /dev/md14 (substitute RAID level as desired; 1=Mirroring, 0=Striping) | ||
+ | <pre> | ||
+ | RAID_LEVEL=1 | ||
+ | echo "y" | mdadm --create --verbose /dev/md14 --level=${RAID_LEVEL} --raid-devices=2 /dev/sda4 /dev/sdb4 | ||
+ | |||
</pre> | </pre> | ||
+ | </li> | ||
+ | |||
+ | <li> Format large RAID volume and mount it (as /srv) | ||
+ | <pre> | ||
+ | mkfs.ext3 -F /dev/md14 | ||
+ | mount -t ext3 /dev/md14 /srv | ||
+ | |||
+ | </pre> | ||
+ | </li> | ||
+ | |||
+ | <li> Automatically mount large RAID volume during boot (as /srv) | ||
+ | <pre> | ||
+ | echo "/dev/md14 /srv ext3 noatime 0 0" >>/etc/fstab | ||
+ | |||
+ | </pre> | ||
+ | </li> | ||
+ | |||
+ | <li> Clean up mdadm.conf (allow detection of all RAID volumes during boot) | ||
+ | <pre> | ||
+ | SED_FILE='/etc/mdadm/mdadm.conf' | ||
+ | SED_SEARCH='^\s*ARRAY\s+.*$' | ||
+ | SED_REPLACE='' | ||
+ | sed -r "s/${SED_SEARCH}/${SED_REPLACE}/" -i ${SED_FILE} | ||
+ | mdadm --quiet --detail --scan >>/etc/mdadm/mdadm.conf | ||
+ | |||
+ | </pre> | ||
+ | </li> | ||
<li> Disable login terminals (prevent error messages in /var/log/syslog every 5 minutes about /sbin/getty respawning too fast) | <li> Disable login terminals (prevent error messages in /var/log/syslog every 5 minutes about /sbin/getty respawning too fast) | ||
<pre> | <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} | sed -r "s~${SED_SEARCH}~${SED_REPLACE}~g" -i ${SED_FILE} | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
+ | |||
+ | <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 -E '^\s*FILESYSTEMS\s*=\s*\"((vfat\s+[^\"]*)|([^\"]*\s+vfat\s+[^\"]*)|([^\"]*\s+vfat))\"$' "${SED_FILE}"; then sed -r "s~${SED_SEARCH}~${SED_REPLACE}~g" -i ${SED_FILE}; fi | ||
+ | |||
+ | </pre> | ||
</li> | </li> | ||
Line 378: | Line 505: | ||
echo "deb http://security.debian.org lenny/updates 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 | echo "deb-src http://security.debian.org lenny/updates main contrib" >>/etc/apt/sources.list | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Update package lists | <li> Update package lists | ||
<pre> | <pre> | ||
apt-get update | apt-get update | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Wait for RAID synchronization to complete | <li> Wait for RAID synchronization to complete | ||
Line 395: | Line 526: | ||
cat /proc/mdstat | cat /proc/mdstat | ||
sync | sync | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Restart device | <li> Restart device | ||
<pre> | <pre> | ||
− | reboot; logout | + | sync; reboot; logout |
− | + | ||
+ | </pre> | ||
+ | </li> | ||
'''Congratulations! You should now have a working Debian 5.0 server running on a Buffalo Linkstation Mini.''' | '''Congratulations! You should now have a working Debian 5.0 server running on a Buffalo Linkstation Mini.''' | ||
Line 407: | Line 541: | ||
=== Extras === | === Extras === | ||
+ | |||
<li> Add user (never login as root again, use sudo command instead) | <li> Add user (never login as root again, use sudo command instead) | ||
<pre> | <pre> | ||
− | + | USER_NAME=visitor | |
adduser ${USER_NAME} | adduser ${USER_NAME} | ||
− | </pre> | + | |
+ | </pre> | ||
+ | </li> | ||
<li> Allow user to become super user (using sudo command) | <li> Allow user to become super user (using sudo command) | ||
<pre> | <pre> | ||
echo "${USER_NAME} ALL=(ALL) ALL" >>/etc/sudoers | echo "${USER_NAME} ALL=(ALL) ALL" >>/etc/sudoers | ||
− | |||
− | + | </pre> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | </pre> | + | |
</li> | </li> | ||
+ | |||
</ol> | </ol> | ||
+ | |||
== See Also == | == See Also == | ||
+ | * [[Install_Debian_6.0_(Squeeze)_On_Buffalo_Linkstation_Mini|Install Debian 6.0 On Linkstation Mini]] | ||
* [[Revert Buffalo Linkstation Mini To Stock Firmware]] | * [[Revert Buffalo Linkstation Mini To Stock Firmware]] | ||
− | * [[ | + | * [[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]] | * [[LS_Mini:_Install_Gentoo|Install Gentoo On Linkstation Mini]] | ||
* [[GenLink for ARM9]] | * [[GenLink for ARM9]] | ||
+ | |||
== References == | == References == |
Latest revision as of 17:45, 30 May 2011
![]() |
Contents
![]() |
|
Overview
The following process converts a Buffalo Linkstation Mini (model LS-WSxxxxGL/R1) into a fully functional GNU/Linux server running Debian version 5.0.6 (Lenny) with the backported Linux kernel (version 2.6.32-27). No disassembly required. Both RAID1 (Mirroring) and RAID0 (Striping) configurations are supported. 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 5.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 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 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
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
- Disconnect power cable from device
- Disconnect all USB devices (and keep them disconnected for the duration of this process)
- Move device switch to "on" position
- Attach device to network
- Connect power cable to device
- Wait for device to finish booting (no blinking lights)
- Open device web interface (factory default address is http://192.168.11.150, or use the IP address assigned by your network)
- Login (user = admin, password = password)
- Remove existing RAID configuration (Disk Management | RAID Setup | RAID Array 1 | Change RAID Array ...)
- Create new RAID1 (mirroring) array (Disk Management | RAID Setup | RAID Array 1 | RAID Mode: RAID1 ...)
- Wait for "Building RAID Array" to complete
- Boot Ubuntu 10.04 Desktop Edition CD-ROM on computer
- Select language as desired (English)
- Click on "Try Ubuntu 10.04 LTS" (to use Ubuntu without making any changes to your system)
- Open a new terminal window (Applications | Accessories | Terminal )
- Start a new bash shell with root privileges
sudo bash
- Install OpenJDK (for running ACP Commander software)
apt-get update apt-get -q -y install openjdk-6-jre
- Download ACP Commander software (acp_commander.jar)
wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/acp_commander.jar
- Determine IP address of device and assign it to environment variable (substitute appropriate IP address)
IP_ADDRESS=192.168.11.150
- Instruct device to enable Telnet and remove root password
java -jar acp_commander.jar -t ${IP_ADDRESS} -o
- Establish Telnet session with device
telnet ${IP_ADDRESS}
- Login as root (no password required)
- Set recent date and time (prevent error messages about file dates, format=MMDDhhnnYYYY)
date 050900002011
- Kill all unnecessary processes
kill -9 $(ps | grep -vE '\[.*\]|(init)|(syslogd)|(klogd)|(getty)|(telnetd)|(-sh)|(ps)|(VmSize)|(grep)|(kill)|(awk)' | awk '{print $1}')
- Disable all active swap paritions
swapoff -a
- Free secondary drive (/dev/sdb) partitions from RAID configuration
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
- Make sure secondary drive is not in use
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;
- Repartition secondary drive (substitute partition sizes as desired)
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
- Create and activate swap partition
mkswap /dev/sdb2 swapon /dev/sdb2
- Create RAID volumes
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
- Format RAID volumes
mkfs.ext3 -F /dev/md11 mkfs.ext3 -F /dev/md13
- Mount RAID volumes
mkdir -p /mnt/lsmini mount -t ext3 /dev/md13 /mnt/lsmini mkdir -p /mnt/lsmini/boot mount -t ext3 /dev/md11 /mnt/lsmini/boot
- Install custom boot loader (force boot from /dev/md13)
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
- Install custom kernel (Debian 5.0 backported kernel 2.6.32-27)
cd /mnt/lsmini wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/5.0/kernel-2.6.32-27-debian-lsmini.tar.gz tar --extract --verbose --same-permissions --gzip --file kernel-2.6.32-27-debian-lsmini.tar.gz
- Install root filesystem (from archive of debootstrap stage 2 files)
cd /mnt/lsmini wget http://downloads.buffalo.nas-central.org/Users/rpinchbeck/lsmini/debian/5.0/bootstrap-debian-5.0.6-armel-stage2.tar.gz tar --extract --verbose --same-permissions --gzip --file /mnt/lsmini/bootstrap-debian-5.0.6-armel-stage2.tar.gz
- Prepare host settings (adjust host name and IP addresses as needed)
HOST_NAME=lsmini HOST_ADDRESS=192.168.1.77 HOST_NETMASK=255.255.255.0 HOST_GATEWAY=192.168.1.1
- Configure network interface (/etc/network/interfaces)
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)
- Configure host name (/etc/hostname)
echo "${HOST_NAME}" >/mnt/lsmini/etc/hostname
- Configure mapping from address to host name (/etc/hosts)
echo "127.0.0.1 localhost" >/mnt/lsmini/etc/hosts echo "${HOST_ADDRESS} ${HOST_NAME}" >>/mnt/lsmini/etc/hosts
- Configure mount points (/etc/fstab)
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 "none /dev/shm tmpfs noatime,nodev,nosuid,noexec 0 0" >>/mnt/lsmini/etc/fstab
- Configure network name resolution (/etc/resolv.conf)
cp -a /etc/resolv.conf /mnt/lsmini/etc/resolv.conf
- Change root password (new password = lsmini)
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}
- Prepare for reboot (Overwrite factory-installed boot files with custom ones)
cd /mnt/lsmini rm -rf /boot/* cp -a /mnt/lsmini/boot/* /boot/
- Wait for RAID synchronization to complete
while egrep -iq '(recovery)|(resync)' /proc/mdstat; do clear cat /proc/mdstat sleep 5 done clear cat /proc/mdstat sync
- Unmount RAID volumes
sync cd /mnt umount /mnt/lsmini/boot umount /mnt/lsmini
- Reboot device
sync; reboot; logout
- Wait for device to finish booting (no blinking lights)
- Assign new IP address to environment variable
IP_ADDRESS=192.168.1.77
- Use SSH to login as root (password = lsmini)
ssh root@${IP_ADDRESS}
- Change root password to something hard to guess
passwd root
- Select timezone
dpkg-reconfigure tzdata
- Ensure that date and time are correct
date
- Make sure primary drive is not in use (/dev/sda)
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;
- Repartition primary drive (must have same partition sizes as secondary drive)
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
- Format and activate swap partition on primary drive
mkswap /dev/sda2 swapon /dev/sda2
- Automatically mount swap partition during boot
echo "/dev/sda2 none swap sw,pri=2 0 0" >>/etc/fstab
- Add primary drive partitions to RAID volumes (/dev/md11 and /dev/md13)
echo "y" | mdadm --manage /dev/md11 --add /dev/sda1 echo "y" | mdadm --manage /dev/md13 --add /dev/sda3
- Create large RAID volume on /dev/md14 (substitute RAID level as desired; 1=Mirroring, 0=Striping)
RAID_LEVEL=1 echo "y" | mdadm --create --verbose /dev/md14 --level=${RAID_LEVEL} --raid-devices=2 /dev/sda4 /dev/sdb4
- Format large RAID volume and mount it (as /srv)
mkfs.ext3 -F /dev/md14 mount -t ext3 /dev/md14 /srv
- Automatically mount large RAID volume during boot (as /srv)
echo "/dev/md14 /srv ext3 noatime 0 0" >>/etc/fstab
- Clean up mdadm.conf (allow detection of all RAID volumes during boot)
SED_FILE='/etc/mdadm/mdadm.conf' SED_SEARCH='^\s*ARRAY\s+.*$' SED_REPLACE='' sed -r "s/${SED_SEARCH}/${SED_REPLACE}/" -i ${SED_FILE} mdadm --quiet --detail --scan >>/etc/mdadm/mdadm.conf
- Disable login terminals (prevent error messages in /var/log/syslog every 5 minutes about /sbin/getty respawning too fast)
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}
- Allow USB flash drives formatted with the VFAT file system (Windows) to be mounted automatically in /media/usb
SED_FILE='/etc/usbmount/usbmount.conf' SED_SEARCH='^(\s*FILESYSTEMS\s*=\s*\")(.*)(\"\s*)$' SED_REPLACE='\1\2 vfat\3' if ! grep -E '^\s*FILESYSTEMS\s*=\s*\"((vfat\s+[^\"]*)|([^\"]*\s+vfat\s+[^\"]*)|([^\"]*\s+vfat))\"$' "${SED_FILE}"; then sed -r "s~${SED_SEARCH}~${SED_REPLACE}~g" -i ${SED_FILE}; fi
- Configure package sources (/etc/apt/sources.list)
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
- Update package lists
apt-get update
- Wait for RAID synchronization to complete
while egrep -iq '(recovery)|(resync)' /proc/mdstat; do clear cat /proc/mdstat sleep 5 done clear cat /proc/mdstat sync
- Restart device
sync; reboot; logout
- Add user (never login as root again, use sudo command instead)
USER_NAME=visitor adduser ${USER_NAME}
- Allow user to become super user (using sudo command)
echo "${USER_NAME} ALL=(ALL) ALL" >>/etc/sudoers
Prepare Device
![]() |
You may proceed immediately after the array has been built (you do not need to wait for the drive check to complete)
![]() |
The following commands will delete all existing partitions on the secondary drive and reconfigure it as follows...
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 |
Install Debian System
Configure Debian System
Congratulations! You should now have a working Debian 5.0 server running on a Buffalo Linkstation Mini.
Extras
See Also
- Install Debian 6.0 On Linkstation Mini
- Revert Buffalo Linkstation Mini To Stock Firmware
- Install Ubuntu 9.04 On Linkstation Mini
- Install Gentoo On Linkstation Mini
- GenLink for ARM9