2012/10/30

網樂通改機 - 網路安裝 debian (chroot)

[2012/12/02 更新]
打算直接將 debian 裝到網樂通裏面記憶卡第四個分區(/dev/sda4).
分成幾個步驟:

  1. 從 console 改由 /bin/sh 開機(或是已經改機連入 telnet)
  2. 確定網樂通可以連到 internet
  3. 替換 busybox, 讓他可以支援 ar 指令
  4. 安裝 debootstrap
  5. 安裝 debian
分別敘述如下:

2.確定網樂通可以連到 internet

我的接法比較複雜,筆記型電腦(簡稱NB), 網樂通簡稱(nextvod):
nextvod, 設固定ip 
  • console 線連到 NB 的 USB port
  • ethernet cable 線連到 NB 的 ethernet 插槽
  • 設定固定 ip , 以 192.168.137.2 為例
    • /sbin/ifconfig eth0 192.168.137.2 netmask 255.255.255.0 up
    • /sbin/route add default gw 192.168.137.1
  • 設定 /etc/resolv.conf
    • nameserver 168.95.1.1
    • nameserver 8.8.8.8
如果有dhcp環境,可以改設動態 ip, 在NB 設定 dhcp server,在網樂通裏面,輸入:
  • /usr/sbin/udhcpc &
NB,我使用 Arch Linux, 參考設定nat方式
  1. ip addr add 192.168.137.1/24 broadcast + dev eth0
  2. ip link set eth0 up
  3. echo 1 > /proc/sys/net/ipv4/ip_forward
  4. iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
  5. iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  6. iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
此時應該在 nextvod 可以用 ping www.twpda.com 看到 ip

3. 替換 busybox, 讓他可以支援 ar 指令

在網樂通裡抓取我編譯好的busybox v1.20.2,並設定好  ar symbolic link:
  1. gzip -d busybox.sh4.1.20.2.gz
  2. chmod +x busybox.sh4.1.20.2
  3. mv busybox.sh4.1.20.2 /bin
  4. ln -s /bin/busybox.sh4.1.20.2 /usr/bin/ar

4. 安裝 debootstrap 所需環境

  1. cd /tmp
  2. wget http://ftp.tw.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.26+squeeze1_all.deb
  3. ar x debootstrap_1.0.26+squeeze1_all.deb 
  4. tar -C/ -xzf data.tar.gz
只安裝 debootstrap 還需要 perl 或是 pkgdetail, 此處放上 pkgdetail 安裝方式
  1. 在cross-compile環境先編好 pkgdetails.c,下載我編好的附件放到網樂通裏
  2. tar -C/ -xzf pkgdetails.sh4.tgz
  3. 如果沒裝會有下列訊息: E: No pkgdetails available; either install perl, or build pkgdetails.c from source
另一種方法,使用別人編譯好的 cdeboostrap 失敗, 一執行就產生 kernel too old 訊息
  1. wget http://debian.nctu.edu.tw/debian-ports/pool-sh4/main/c/cdebootstrap/cdebootstrap-static_0.5.9_sh4.deb
  2. /usr/bin/cdebootstrap-static --arch=sh4 squeeze /mnt/sda4/ http://www.si-linux.co.jp/pub/debian-sh/squeeze-sh4/

5. 安裝 debian

一步到位安裝方式(失敗):

  1. mkdir -p /mnt/sda4 ; mount /dev/sda4 /mnt/sda4 # 此處假設安裝到 /dev/sda4
  2. 以下指令試過 t=squeeze 因為 kernel 版本不匹配無法 chroot
  3. t=lenny ; debootstrap --arch=sh4 $t /mnt/sda4/ http://www.si-linux.co.jp/pub/debian-sh/$t-sh4/

分兩階段安裝方式(失敗,參考: Keung Liang 文件):

  1. 先在 PC 端準備好 stage1(試過直接用 ArchLinux 的 debootstrap, 但是缺乏舊版lenny的pgpkey,無法安裝,改由之前製作的 chroot stlinux 2.3 環境製作),指令如下:
    1. sudo dpkg --install debootstrap_1.0.26+squeeze1_all.deb
    2. sudo debootstrap --arch=sh4 --foreign --include aptitude,vim,openssh-server,gcc,python lenny /opt/rootfs/ http://www.si-linux.co.jp/pub/debian-sh/lenny-sh4/
    3. cd /opt/rootfs ; sudo tar cJf ../debian_sh4_lenny_stage1.txz
  2. 將檔案傳到網樂通
  3. 在網樂通裏面進行第2步安裝
    1. cd /mnt/sda4 ; tar xf debian_sh4_lenny_stage1.txz
    2. chroot .
    3. mount proc /proc -t proc
    4. mkdir -p /dev/pts
    5. mount devpts /dev/pts -t devpts
    6. mount sysfs /sys -t sysfs
    7.  /debootstrap/debootstrap --second-stage

不管哪種方法,都在這行失敗

I: Unpacking whiptail...

W: Failure while installing base packages.  This will be re-attempted up to five times.

檢查 /debootstrap/debootstrap.log


dpkg: regarding .../rsyslog_3.18.6-4_sh4.deb containing rsyslog:
 rsyslog conflicts with linux-kernel-log-daemon
  klogd provides linux-kernel-log-daemon and is present and installed.
dpkg: error processing /var/cache/apt/archives/rsyslog_3.18.6-4_sh4.deb (--unpack):
 conflicting packages - not installing rsyslog

忽略後,繼續設定

cd /sbin
mv start-stop-daemon start-stop-daemon.FAKE
mv start-stop-daemon.REAL start-stop-daemon

編輯 /etc/apt/sources.list
deb http://www.si-linux.co.jp/pub/debian-sh/lenny-sh4/ lenny main contrib non-free
#deb http://ftp.debian-ports.org/debian sid main
deb-src http://ftp.debian.org/debian/ lenny main contrib non-free

更新套件(lenny 已經被debian 官方宣告停止支援,所以會有些失敗訊息)
apt-get update
dpkg --configure -a

locale語言顯示中文:
aptitude install locales

dpkg-reconfigure locales # 設定 glibc 支援語系

勾選 en_US.UTF-8, zh_TW.big5, zh_TW.UTF-8
Default locale for the system environment: en_US.UTF-8(預設也可選zh_TW.UTF-8)
檢查 locale -a

刪去多餘的語系檔案

apt-get install localepurge  # 設定 en, en_US.UTF-8, zh, zh_TW.UTF-8
localepurge

apt-get clean # 刪除套件安裝檔

ntpdate校正時間:
apt-get install ntpdate
ntpdate time.stdtime.gov.tw

設定開機自動對時(在未chroot 環境):
vi /etc/init.d/rcSBB
/usr/sbin/chroot /mnt/usb/rootfs /bin/sh -c "/usr/sbin/ntpdate time.stdtime.gov.tw"
顯示台灣時區(差8小時校正):
cp /mnt/usb/rootfs/usr/share/zoneinfo/Asia/Taipei /etc/localtime
cp /mnt/usb/rootfs/usr/share/zoneinfo/Asia/Taipei /mnt/usb/rootfs/etc/localtime

支援 NTFS:
insmod /root/modules/fuse.ko
/bin/sh4-linux-ntfs-3g -o iocharset=utf8 /dev/sdb1/root/Downloads  

不過這個 debian repository 已經很舊了,沒有什麼套件.

沒有留言: