처음‎ > ‎지식기반‎ > ‎

Plug Computing Power (Seagate Dockstar)

게시자: Sundew Shin, 2011. 1. 5. 오전 1:42   [ Sundew Shin에 의해 업데이트됨(2013. 6. 26. 오후 8:04) ]

Introduction

최근 Google Solution을 필두로 하는 Cloud Computing이 주목 받고 있다. 이에, 개인용 Cloud Computing, 즉, 언제 어디서나 자택 혹은, 사무실에 있는 Hard Disk를, 인터넷이 연결 된 어디에서든 access할 수 있는 솔루션으로 저변이 확대 되고 있다. 이를 가능케 한 시초에 Marvell의 ARM계열 ARMADA CPU를 사용하는 Plug Computer가 있는데, 이 활용에 대해 알아 보고자 한다.
SheevaPlug에서 시작된 plug computer는, Pogoplug라는 형태의 제품으로 발전 되었고, 필자는 pogoplug pro를 입수한 관계로 이를 setting하는 것에서 활용하는 것 까지의 과정을 함께 정리 하고자 한다.

여기서 언급 되는 대부분의 내용들이, 다른 사람들에 의해 이미 정리 되어 있는 것이지만, 내 생각에, 완전하고 각 step 별로 처음부터 끝까지 나 자신에 의해 검증 된 게시물이, 아마도 미래에 누군가의 노력과 시간을 덜 수 있으리라 생각한다. 모든 권리는 원저작자의 것이며, 이 글에소개 된 H/W와 S/W에 의한 어떠한 직간접 손실에도 본 저자는 책임을 질 수 없음을 분명히 한다.

NOTE: 시작에 앞서 DHCP를 사용하는 환경이므로 rebooting시 IP가 바뀌어서 어려움을 격는 상황이 있으니 Port Scanner를 하나 준비 하는 것도 방법이다.

Benefits

  • Modular: USB로 booting하는 option을 선택 한다면, 프로그램 변경시 USB만 바꾸고 rebooting 하면 된다. 완전히 새로운 시스템이 된다.

Applications

Warning

  • 일반적인 Embedded Linux의 OS정보가 ROM->RAM영역으로 초기화때 복사 되어 사용 되는 구조이다.
  • 이 구조에서 동작중에 임의로 전원을 분리 시키더라도 복제된 이미지만 날아 가므로 본 OS image에는 충격을 주지 않는다.
  • 하지만, 본 기사에서 소개하는 방법은 USB에 OS를 설치해서 사용하므로, Kernel이 수시로 USB에 자료를 쓰고 지우므로, 운영중에 전원을 분리하면 OS image가 손상 된다.
  • 이러한 이유에서 결국 잘 booting되던 USB가 갑자기 안되고 하는 일들이 발생하니, 항상 전원 분리 때는 정상적으로 OS를 종료 후 해야 한다.
    • busybox reboot

OS Installation

Debian Installation - Seagate Dockstar

Login

  • Dockstar Login
    • username: root
    • password: stxadmin (factory default)

uBoot & Debian 설치 [NEW: RECOMMENDED]

다음 script를 실행 하면, uBoot 설치와 Debian 설치까지를 자동을 실행 시킬 수 있다.
다음 자동화 script는 다음과 같은 작업을 순차적으로 수행 한다:
  • uBoot Flashing
  • Pogoplug service 중지 (옵션)
  • 필수 base program 설치
  • 유동/고정 IP 설정
  • netconsole setting (??)
순차적으로 실행 할 명령문들은 다음과 같다:
다음은 위 script가 발표되기 전에 debian을 설치 했던 방법으로 참고로만 활용 한다. 

uBoot & Debian 설치 [OLD]

  • Root partition에 쓰기 제한을 해제 한다.
    • mount -t ubifs -o rw,remount,relatime /
  • Debian 설치 script 실행
    • cd /tmp
    • wget http://jeff.doozan.com/debian/dockstar.debian-squeeze.sh
    • chmod +x dockstar.debian-squeeze.sh
    • export PATH=$PATH:/usr/sbin:/sbin
    • ./dockstar.debian-squeeze.sh
  • Rebooting후 Debian으로 booting 되지 않고 다시 pogoplug로 된다면, 전원을 분리 했다가 다시 꽂아 rebooting 한다.
  • Rebooting 된 후에 기존 IP로 접속 되지 않는다면 Port scanner로 scan하여 port:22(ssh)가 열려 있는 host로 접속 한다.
  • DNS문제로 package 정보를 읽어 오지 못한다면 수작업으로 배포사이트를 등록 해 준다.
    • echo 'deb http://128.226.116.176/debian squeeze main' >> /etc/apt/sources.list
  • 궁극적으로 DNS 정보를 수정 해 준다.
  • nano /etc/resolv.conf
  • namerserver 8.8.8.8 - 추가
  • router등에서 다른 설정을 하지 않았다면 IP address를 고정하는 것이 편리 할 것이다.
    • nano /etc/network
    • iface eth0 inet static
          address 192.168.1.100
          netmask 255.255.255.0
          network 192.168.1.0
          broadcast 192.168.1.255
          gateway 192.168.1.254
    • /etc/init.d/networking restart - 변경사항 반영한다.
  • IP가 고정 되면 그 때 부터는 Port scanner는 필요 없고, Windows 등 shell에서 연속적으로 ping을 하면서 online 상태를 확인 하는 것이 편리 하다.
    • ping -t 192.168.1.100
  • 설정 IP로 재접속하여 확인 한다.
  • http://www.rudiswiki.de/wiki/DockStarDebian
  • upgrade to the latest kernel

Post Installation - 설치 완료 후

  • Login 후 곧바로 할 일 (암호 바꾸기)
    • passwd
  • apt-get test하기
    • apt-get update && apt-get upgrade
  • 필요한 tool들을 설치 한다.
    • apt-get install nano aptitude man-db locate
  • Dockstar는 hardware clock이 없으므로 기본설정에서 rebooting 때마다 1970년 처음으로 계속 돌아 가므로,
    • 로그인 때마다 password를 갱신하라는 할 것이다.
    • ntpd service를 추가 해서 boot time때 시간을 update 한다.
      • apt-get install ntp
    • 시간 동기후 표준시간으로 표시되고 로컬시간(대한민국)으로 변경하고 싶다면,
      • dpkg-reconfigure tzdata

Demonstration

(TODO: 활용안 중 일부 활용 case를 구성한다.)

Hardware Configuration

Wifi Adapter

Model: TP-Link TL-WN321G
Hardware Finger Print:
  • lsusb 설치 하기
    • apt-get install usbutils
  • lsusb
    • Bus 001 Device 012: ID 148f:2070 Ralink Technology, Corp. RT2070 Wireless Adapter
  • Hardware 기본 정보 파악하기
    • apt-get install hwinfo
    • hwinfo --wlan
  • Install wireless tool
    • apt-get install wireless-tools
    • apt-get install wpasupplicant  # for WLAN WPA2 encryption
  • driver firmware 가져 오기
    • echo 'deb http://ftp.us.debian.org/debian squeeze main contrib non-free' >> /etc/apt/sources.list
    • apt-get update
    • apt-get install firmware-ralink
  • wlan0 연결 상태를 확인 한다.
    • iwconfig
  • /etc/network/interfaces 편집 하기 (wlan0을 먼저 기술)
    • auto lo eth0
      iface lo inet loopback
      # The primary network interface
      auto wlan0
      #iface wlan0 inet dhcp
      iface wlan0 inet static
          wpa-ssid "SITHOME001"
          wpa-psk "********"
          address 192.168.1.110
          netmask 255.255.255.0
          network 192.168.1.0
          broadcast 192.168.1.255
          gateway 192.168.1.1
      # The secondary network interface
      #iface eth0 inet dhcp
      iface eth0 inet static
          address 192.168.1.6
          netmask 255.255.255.0
          network 192.168.1.0
          broadcast 192.168.1.255
          gateway 192.168.1.1
  • wlan0을 활성화 한다.
    • ifconfig wlan0 up
  • Access Point를 검색 한다.
    • iwlist wlan0 scan
  • 접속을 시도 한다.
    • iwconfig wlan0 essid 'FRITZ!Box Fon WLAN 7050'
    • ifup -v wlan0
  • 접속 상태 확인
    • iwconfig wlan0
[NIC auto, hotplug Handling] - FAILED
[Wired & Wireless Hot-swap] - FAILED
위에서 wifi가 동작하는 것을 확인 했다면, 기존 설정을 모두 무시하고 다음 단계를 진행 한다.
  • wicd를 설치 한다.
    • apt-get install wicd-curses
      or
    • apt-get install wicd-gtk
  • 위에서 설정 했던 고정 IP를 설정 해 주고, wifi adapter정보가 틀리다면 정정 해 준다.
  • 설정에 자신이 있다고 해도, 바로 reboot 하지 말고, 현재 연결 상태에서 동작을 확인 한다.
    • /dev/init.d/wicd start
  • 어떤 이유에서인지 유선감지 option 'Automatic'이 wired connection 복구 event를 감지 하지 못한다면. 'ethtool'을 선택 한다:
    • Preferences|External Programs|Wired Link Detection
      • 'Automatic' -> 'ethtool'
  • hot-swap troubleshooting은 Laptop에서 연속적으로 ping을 하면서 연결조합을 바꿔서 확인 한다.
    • ping -t 192.168.1.100
처음에 wicd-curses로 설정을 시도 하여 봤으나 switch-over 되는 상황을 확인 하기 힘들어 gnome환경에서 wicd-gtk로 설정하여 성공 시켰다. 아래는 GUI를 이용한 설정 후, 결과 파일들의 dump이다:
  • cat /etc/network/interfaces
    • auto lo
      iface lo inet loopback
  • 자동 생성 파일들 [첨부파일]
[NIC Bonding] - FAILED
  • High-availability NIC Bond 방법은 현재 Kernel에서 지원 해 주지 않으므로 설정을 한다고 해도 동작 하지 않는다.
    • root@white1:~# modprobe bonding
      FATAL: Module bonding not found.
  • http://www.howtoforge.com/nic_bonding
Bonding시 서로 다른 NIC에 동일한 IP를 설정 해 주므로, WICD와 같은 manager가 없이, 일반적으로 사용하려면 많은 혼란이 있을 수 있다.
예를 들어, IP address D-class (마지막 자리수)를 각각 달리 해 주더라도, shell에서 예를 들어 192.168.1.50으로 ping을 하려고 할 때, 어느 NIC을 통해야 할지 혼란이 오고, 결국에 모든 NIC에 message를 전송하게 된다 (http://www.debianhelp.org/node/10114). 외부의 접속 요구에 대한 반응도 마찮가지이다. 해서, D-class가 다르다고 하더라도, 두 NIC이 같이 동작하는 효과를 낸다.
  • NOTE: 얼핏 생각하면 목표가 성공한 것 같지만, 결국 wired NIC의 connection이 끊어지면 wireless가 자동으로 backup 하지 않으므로 모두 끊어 진다. 이 문제를 해소한 것이 WICD나 Network-manager이지만, 우리가 사용하는 NIC이 문제인지 아니면 다른 이유가 있는지 이 부분이 정상적으로 동작 하지 않았다. 
다음은 이 경우 networking restart시 나타나는 error message이다.
  • root@white1:~# /etc/init.d/networking restart
    Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces ... (warning).
    Reconfiguring network interfaces...SIOCDELRT: No such process
    done.
C-class를 변경 해 준다면 정상적으로 restart 하는 것을 볼 수 있다.
  • root@white1:~# /etc/init.d/networking restart
    Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces ... (warning).
    Reconfiguring network interfaces...done.
[netplug 사용] - SUCEEDED
두개의 NIC (eth0, wlan0)에 동일한 IP를 설정하고 Hotswapable 하게 설정하는 것에 많은 변수가 있음을 확인 하였다.
위에서와 같이 network manager를 통한 관리도 시도 하였으나 CPU에 load가 얼마나 걸리는가의 상황에 따라 만족스럽지 못한 동작성능을 보였다. 결국, 각각의 NIC에 별도의 IP를 설정하였고, netplug를 이용해서 연결 상태를 항상 monitoring하고, 준비가 되는데로 connection을 활성화 하는 방법을 선택 하였다. 
다음은 설치와 설정 내용이다.
  • Installation
    • apt-get install netplug

다음은 필자의 설정 파일이니 참조 한다:
/etc/network/interfaces
auto lo eth0 wlan0
iface lo inet loopback
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.1.110
    netmask 255.255.255.0
    broadcast 192.168.1.255
    network 192.168.1.0
    gateway 192.168.1.254
    dns-nameservers 192.168.1.254 8.8.8.8 8.8.4.4
    pre-up ip link set dev wlan0 up || true
    wpa-conf /etc/wpa_supplicant/wpa_supplicant_wifi.conf
    wpa-driver wext
    pre-down /etc/netplug/netplug wlan0 out >/dev/null 2>&1 || true
    post-down ip link set dev wlan0 down || true
iface eth0 inet static
    address 192.168.1.110
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.254
    dns-nameservers 192.168.1.254 8.8.8.8 8.8.4.4
    dns-search example.org
    pre-up ip link set dev eth0 up || true
    pre-down /etc/netplug/netplug eth0 out >/dev/null 2>&1 || true
    post-down ip link set dev eth0 down || true

/etc/netplug/netplug
#!/bin/sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH
dev="$1"
action="$2"
case "$action" in
in)
    case "$dev" in
    eth0)
        ifconfig wlan0 down
        wait
        ifconfig eth0 up
        ;;
    wlan0)
        ifconfig eth0 down
        wait
        ifconfig wlan0 up
        ;;
    *)
        exit 0
        ;;
    esac
    ;;
out)
    case "$dev" in
    eth0)
        ifconfig eth0 down
        wait
        ifconfig wlan0 up
        ;;
    wlan0)
        ifconfig wlan0 down
        wait
        ifconfig eth0 up
        ;;
    *)
        exit 0
        ;;
    esac
    ;;
*)
    exit 0
    ;;
esac

/etc/wpa_supplicant/wpa_supplicant_wifi.conf
network={
    ssid="open"
    key_mgmt=NONE
    id_str="open"
    priority=10
}
network={
        ssid="HOME"
        psk=e52968a6004619bc3963d26d617ceb690b2497a075392d56d5ec42db97a82e47
        priority=1
}
network={
        ssid="OFFICE"
        psk=58358262f08d072e1dc22060ec3700a60413c4c0925ecd9c4225c19feea5c626
        priority=3
}
  • /etc/wpa_supplicant/wpa_supplicant_wifi.conf, 접속정보 자동 생성
    • wpa_passphrase HOME "secretpassphrase"
Network이 새로 더 해지고 끊어지는 상황을 대비 했다면, 남은 일은 이제 연결되어 있던 결선이 비정상적으로 끊어 졌을 때 자동 복구하는 기능을 넣는 일이다. Wired라면 이런일이 잘 없겠지만, Wireless라면 언제나 있을 수 있는 일이다. dockstar가 바로 옆에 있다면 금방 USB Wifi module을 뺏다 꽂으면 되겠지만, 원격지에 있다면 자동화가 필요하다.


Bluetooth Adapter

Hardware Finger Print:
  • lsusb
    • Model: Bus 001 Device 005: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
  • 구성 요소 설치 하기
  • apt-get install bluetooth
  • 상태 확인
    • /etc/init.d/bluetooth status
  • 서비스 시작 하기
    • root@debian:~# /etc/init.d/bluetooth start
      Starting bluetooth: bluetoothd.
      root@debian:~# /etc/init.d/bluetooth status
      bluetooth is running.

Sound Card Adapter

Hardware Finger Print:
  • lsusb
    • Bus 001 Device 010: ID 046d:0a01 Logitech, Inc. USB Headset
  • 구성 요소 설치 하기
    • apt-get install alsa-base alsaplayer alsaplayer-text alsa-utils madplay mplayer
  • 설정 하기
  • Volume control 수정 하기
    • echo 'ao=alsa' >> ~/.mplayer/config
    • echo 'mixer-channel="Master"' >> ~/.mplayer/config
  • nano /etc/modprobe.d/alsa-base.conf
    • # Allow snd-usb-audio to be loaded as first soundcard
      options snd-usb-audio index=0
  • 테스트
    • mplayer -ao alsa -msgcolor -cache 128 -playlist http://www.bbc.co.uk/radio1/wm_asx/aod/radio1.asx
    • mplayer -ao alsa -msgcolor -cache 128 http://www.tv-radio.com/station/fip_mp3/fip_mp3-128k.m3u

Webcam

Hardware Finger Print:
  • lsusb
    • Bus 001 Device 011: ID 045e:0772 Microsoft Corp.
  • dmesg
    • uvcvideo: Found UVC 1.00 device Microsoft® LifeCam Studio(TM) (045e:0772)
      input: Microsoft® LifeCam Studio(TM) as /devices/platform/orion-ehci.0/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/input/input3 12:3:1: cannot get freq at ep 0x82
      generic-usb 0003:045E:0772.0004: hiddev0: USB HID v1.01 Device [Microsoft Microsoft® LifeCam Studio(TM)] on usb-orion-ehci.0-1.1.3/input4
  • 구성 요소 설치 하기
  •  USB UVC Video Class snapshot program
    • apt-get install uvccapture
  • video for Linux
    • apt-get install libv4l-0
  • dov4l 설치
    • apt-get install dov4l
    • show camera data (Video For Linux)
      • dov4l -q
  • 여기까지 작업 하면 X환경에서 cheese 등 프로그램에서 webcam을 사용 할 수 있다.
  • mjpg-streamer 설치/실행 하기
    http://code.google.com/p/mjpg-streamer-mini2440/
    • cd /root
    • mkdir mjpg-streamer
    • wget http://mjpg-streamer-mini2440.googlecode.com/files/mjpg-streamer-mini2440-bin-r6.tar.gz
    • tar zxf mjpg-streamer-mini2440-bin-r6.tar.gz
    • ./start_uvc.sh
    • web browser로 결과를 확인 한다.
      • http://192.168.1.100:8080

Digital Picture Frame

Model:

가장 먼저 디지털액자가 인식되어 있는 장치명을 알아 낸다.
  • ls -al /dev/disk/by-id/
코드컴파일에 앞서 필요한 프로그램을 설치 한다bzip2와 gcc를 설치한다.
  • apt-get install bzip2 gcc make libc6-dev
ST2205tool을 빌드한다.
  • st2205tool의 소스코드를 받아 컴파일 하여 시스템에 st2205 드라이버를 설치 한다.
    • wget http://www.neophob.com/files/st2205tool-1.4.3.tar.gz
    • tar xvfz st2205tool-1.4.3.tar.gz
    • apt-get install libgd2-xpm-dev
    • cd st2205tool && make && make install
LCD4Linux를 빌드한다. 위 과정에서 설치된 드라이버를 인용하여 실행파일을 만들 것이다.
  • wget http://ssl.bulix.org/projects/lcd4linux/raw-attachment/wiki/Download/lcd4linux-0.11.0-SVN.tar.bz2
  • tar xvfj lcd4linux-0.11.0-SVN.tar.bz2
  • cd lcd4linux-0.11.0-SVN
  • ./configure && make
기본 st2205tool로 해킹이 안된다면 직접 시도 한다.
  • crasm을 설치 한다.
    • apt-get install crasm subversion subversion-tools
    • svn checkout svn://svn.cc65.org/cc65/trunk cc65
  • 만일 다음의 메시지가 나오면 다른 방법이 필요하다.
    • svn: Network connection closed unexpectedly
  • ISP에서 subversion을 막아 둔 경우이고 이 경우 FTP를 통해 파일을 입수하여 진행한다.
    • apt-get install ftp
    • ftp ftp.musoftware.de
    • Name (ftp.musoftware.de:root): anonymous
    • ftp> passive
    • ftp> cd /pub/uz/cc65/snapshot/
    • ftp> get cc65-snapshot-sources-2.13.9.20101115.tar.bz2
    • ftp> quit
    • tar xvfj cc65-snapshot-sources-2.13.9.20101115.tar.bz2
    • mv cc65-snapshot-2.13.9.20101115 cc65
  • 소스를 받았으면 CC65를 컴파일 한다.
    • cd cc65 && make -f make/gcc.mak
  • 이제 임의 해킹을 시도 한다.
    • https://sites.google.com/a/wednus.com/pc/Home/kb-1/plug_computer/generate-hack.pl?attredirects=0&d=1
    • cd st2205tool/hack
    • for x in `ls -1d m_* | grep -v m_coby_dp151`; do mv $x xxx_$x; done # 불필요한 부분들을 제외 시킨다.
    • cd ..
    • ./generate-hack.pl /dev/sdX hack/m_my_new_hack
모든게 완료 되었다면 적당한 lcd4liinux.conf를 만들고 lcd4linux를 실행한다.
  • ./lcd4linux -F -v -f ../lcd4linux.conf
To run this program only when there has picture frame attached, add udev rule to do that
  • SUBSYSTEM=="block", ACTION=="add", ENV{ID_MODEL_ID}=="0001", ENV{ID_VENDOR_ID}=="1403", RUN+="/usr/bin/lcd4linux"
  • SUBSYSTEM=="block", ACTION=="remove", ENV{ID_MODEL_ID}=="0001", ENV{ID_VENDOR_ID}=="1403", RUN+="/usr/bin/killall lcd4linux"
udevadm trigger


Keypad

Model: ...

Application Tips

USB Drive Backup

Disk Copy (To Same Size)

Booting이 잘 안되거나, 아니면 이상 동작시 USB Drive가 문제인지, 아니면, 마지막에 설치한 프로그램이 문제인지 헤매기 시작하면 끝이 없다.
현명한 방법 중 동일한 모델의 USB Drive를 몇개 준비하여, OS설정이 어느정도 마무리 됐을 때 더 늦기전에 Backup 본을 만들어 두는 것이다.
동일 모델이므로 이 것 저 것 신경 쓸 것 없이 가장 단순히 disk 전체를 image copy를 하면 된다.
  • root@debian:/tmp# dd if=/dev/sda of=/dev/sdb
    7669824+0 records in
    7669824+0 records out
    3926949888 bytes (3.9 GB) copied, 2767.56 s, 1.4 MB/s
    root@debian:/tmp#
늦은 밤, 작업이 끝나면 느긋하게 dd 때려 놓고 잠자리에 드는 것도 좋은 습관일 것이다.

Disk Copy (To Bigger Partition/Drive)

  • fdisk 등으로 새 Drive에 bootable partion과 swap partition을 만든다.
  • data partion만 복사 한다. (기존: sda, 신규: sdb로 가정)
    • dd if=/dev/sda1 of=/dev/sdb1
    • e2fsck -f /dev/sdb1
    • resize2fs /dev/sdb1
      • Resizing the filesystem on /dev/sdb1 to 1869308 (4k) blocks.

Disk Copy (To Smaller Partition/Drive)

  • fdisk 등으로 새 Drive에 bootable partion과 swap partition을 만든다.
    • apt-get install rsync
      mount source & target
      dd if=/dev/sda of=/dev/sdb count=1 bs=512
      mount -t ext2 /dev/sda1 /mnt/sda1
      mount -t ext2 /dev/sdb1 /mnt/sdb1
      rsync -ua /mnt/sda1 /mnt/sdb1
      umount /mnt/sda1
      umount /mnt/sdb1

AMP 설치

  • mysql 설치
    • apt-get install mysql-server mysql-client
  • apache2 설치
    • apt-get install apache2
    • nano /etc/apache2/httpd.conf
      • ServerName [Your ServerName]
  • php 설치
    • apt-get install php5 php5-mysql libapache2-mod-php5
  • phpmyadmin 설치
    • apt-get install phpmyadmin
    • nano /etc/apache2/apache2.conf
      • Include /etc/phpmyadmin/apache.conf
    • /etc/init.d/apache2 restart

VNC Server

SSH로 접속하여 대부분의 작업이 가능하지만, 어찌되었건 Troubleshooting을 위해 X(gnome)의 필요성을 절실히 느낀다면 option은 둘이다:
  • USB2VGA adapter를 구매 해서 external monitor를 연결 해 사용하는 것
    • 장점: USB Mouse/Keyboard까지 설치 한다면 Desktop PC를 사용하는것 처럼 쉽게 작업 할 수 있다.
    • 단점: Monitor, VGA Adapter... = 돈
  • VNC Server를 설치 해서
    • 장점: 물리적인 준비물 없음... = 돈
    • 단점: OS image size가 커지므로 production용으로는 적절하지 않다.
본 기사에서는 두번째 방법에 대해 알아 본다.
NOTE: Monitor를 연결 한다고 해도 USB이므로 uBoot과 Kernel booting message는 monitoring 할 수 없다.
  • X 설치 하기; VNC Server 설치 하기
    • apt-get install gnome-desktop-environment xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi xfonts-75dpi-transcoded xfonts-base tightvncserver
  • 설정 변경하기
    • nano ~/.vnc/xstartup
    • #!/bin/sh
      xrdb $HOME/.Xresources

      xsetroot -solid grey
      x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
      # x-window-manager &
      gnome-session &
  • 실행 하기
    • tightvncserver :1
      or 
    • tightvncserver -geometry 1920x1200 :1
  • 종료 하기
    • tightvncserver -kill :1

Webmin

webmin - 서버 관리에 있어서 궁극적인 툴이다.
  • echo 'deb http://download.webmin.com/download/repository sarge contrib' >> /etc/apt/sources.list
  • cd /root
  • repository가 서명 된 GPG키 설치
    • wget http://www.webmin.com/jcameron-key.asc
    • apt-key add jcameron-key.asc 
  • apt-get update
  • apt-get install webmin
  • cd /usr/share/webmin
  • ./changepass.pl /etc/webmin root [password]
  • https://192.168.1.100:10000 - 로그인

anyremote

원격 제어, anyremote information

Troubleshoot

어떤 OS도 마찮가지 이지만 Desktop PC급 OS (여기서는 Debian Linux)를 설치 했다고, H/W가 갑자기 PC급 성능을 내지는 않는다. 우리가 지금 이야기하고 있는 H/W platform은, spec으로 볼 때 Desktop PC에 비할바 없이 초라한 embedded system이다. 한계를 정확히 파악하고, 대신에 그 한계가 역으로 제공하는 장점을 최대한 활용하는 것이 우리의 목표이다. 이러한 사실을 필자와 같이 한 동안 망각한다면, 대상 USB module이 문제다 싶어 이 것 저 것, 몇 개씩을 더 사서 실험 해 보고, firmware도 의심해 보고, kernel module도 직접 compile도 해 보면서 엄청난 시간 낭비를 하게 될 것이다.
다음은 이런 과정을 통해 얻게 된 결론을 정리 한 것이다. 가능하다면 간단한 test case도 덛붙이고자 한다.

Wireless Network 불안정

Wired Ethernet과 달리 wireless는, 암호화 라든지, 전파 delay라던지 하는 여러가지 이유로 더 많은 CPU process time을 요구하는데, 해서, CPU가 주된 process의 증가로 바쁠때는 wireless communication은, 심하게는, 연결중인 모든 connection도 다 끊어지고, 사용 불능 상황까지 간다.
모듈이 문제인지, 아니면 CPU의 한계인지를 실험 해 보고 싶다면 mjpg-streamer를 실행 해 본다. 불안정하게 끊어지며 통신되던 wireless card도 그 실행 다음부터는 안정적인 LED blinking과 data transmission이 실현되는 것을 눈으로 확인 할 수 있을 것이다.
반대로 VNC Server나 여타 X를 실행 한다면 짧게는 3분정도 loading이 모두 완료 될 때까지 접속 불능 상태가 될것이다. 만일 connection establishment sensibility가 높게 되어 있는 router나 기타 무선중계장치를 사용한다면, 이 시간동안 기다려 주지 않고, 연결상태를 강제로 끊거나 DHCP라면 IP를 expire 시킬 것이다. 이런 상황이 되면 CPU가 다시 wireless card로 관심을 보일 때 쯤 되면 연결이 차단 되어 있거나 다른 IP를 network switch로 부터 할당 받아야 하는데, 이런 비정상상태에 대한 OS의 대비 setting은, 우리는 위에서 WICD로 정의 했었지만, system마다 다양 할 수 있기 때문에, 표면적인 결과만을 놓고 봤을 때, 무슨 짓을 해도 해결되지 않는, wireless card 이상으로 보일 것이다.
정상적으로 기대되는 작업이 위와 같은 이유에서 주기적으로 중단 된다면 그 것 보다 귀찮은 일이 없다. 위에서 발견한 결과를 역으로 활용 한다면 상황을 개선 할 수 있다.

Keep-alive Ping Script

crontab에 ping script를 등록 해서 비교적 안정적인 연결상태를 상시 유지 한다.
  • cron 설치 하기
    • apt-get install cron
  • crontab에 다음과 같이 간단한 ping script를 등록 한다.
    • echo '* * * * * root /bin/ping -c1 mindspring.com | tee /tmp/foo$$' >> /etc/crontab

Heartbeat Broadcasting

Heartbeat is a messaging subsystem for high availability which implements serial, UDP, and PPP/UDP heartbeats.
It is one of the messaging layers supported by the Pacemaker cluster resource manager.

General Info: High Availability

wlan0이 wlan1으로 표시

여러개의 다른 Wifi adapter를 system에 연결 했었다면, debian이 이 각 adapter의 finger print(MAC ID)를 저장 해 둬서, 사용 할 adapter를 결정 한 후에도 'wlan1' 같이 두번째, 세번째 ID를 제공 해 줄 것이다.
이 경우에는 finger print 정보를 삭제 해서 초기화 해 준다.
  • nano /etc/udev/rules.d/70-persistent-net.rules

Boot Failure - '** Bad partition 1 **'

uBoot에서 '** Bad partition 1 ** Device NOT ready'란 메시지가 나오고 USB Booting이 안된다면, 가용한 Linux machine (virtual machine 포함)에 USB drive를 인식 시킨 후 fsck와 e2fsck로 USB drive를 고친다.
USB drive가 sdb로 인식이 되어 sdb1이 Root partition으로 가정 했을 때:
  • e2fsck /dev/sdb1
  • fsck /dev/sdb1

netconsole - uBoot Message Monitoring

serial connection이 준비 되지 않았다면 netconsole을 사용해서 uBoot message를 monitoring한다.
모든 것이 일사천리로 처리 된다면 문제 없지만, 일단 booting문제에 있어서 troubleshooting시 많은 의혹을 잠재운다.
  • dockstar준비 하기: serverip = PC IP, ipaddr=Dockstar IP, uBoot Messaging 용도로만 임시로 유효
    • /usr/sbin/fw_setenv serverip 192.168.1.3
    • /usr/sbin/fw_setenv ipaddr 192.168.1.100
    • /usr/sbin/fw_setenv if_netconsole 'ping $serverip'
    • /usr/sbin/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
    • /usr/sbin/fw_setenv preboot 'run if_netconsole start_netconsole'
  • computer 준비 하기
    • nc -l -u -p 6666
sample message dump는 첨부파일 'uBoot_message.txt'를 참조 한다.
NOTE: 이 방법은 Wireless Adapter를 포함한, 다른 모든 USB 초기화 이전에 이뤄 지는 통신으므로, USB Wireless Adapter를 통해 이용할 수 없다.

For the Advanced

Kernel Compile

사용자가 가지고 있는 USB Hardware를, Debian 기본 Kernel Package에서는 지원하지만, 위 설치 과정에서 설치한 Kernel에는 빠져 있다면, 방법은 Kernel Compile을 해서 원하는 기능을 추가 시키는 것 뿐이다.

Kernel Patch


Boot Disk/Partion 바꾸기

어떤 경우던지 debian 설치 disk를 default인 /dev/sda1에서 바꿀 필요가 있을 수 있다. 필자의 경우 USB SDCard Reader기를 설치하여 거기에 꽂아 놓은 Micro SDCard에 설치 해야 할 경우가 있었다. SDCard Reader내의 자체 processor가 Micro SDCard slot을 /dev/sdc로 할당 해 놓았기 때문에, 그렇다고 /dev/sda로 할당 된 sony memory card를 새로 산다는 것도 우습고, 해서, 다른 방법이 없었다.
  • 환경 설정 하기
    • mount -t ubifs -o rw,remount,relatime /
    • /usr/sbin/fw_setenv x_bootargs_root 'root=/dev/sdc1 rootfstype=ext2 rootwait'
    • /usr/sbin/fw_setenv bootargs root=/dev/sdc1 rw
    • reboot

References

tag:embedded | tag:linux
ċ
asound.conf
(1k)
Sundew Shin,
2011. 1. 18. 오전 12:17
ċ
generate-hack.pl
(6k)
Sundew Shin,
2012. 4. 23. 오전 12:08
Ĉ
Sundew Shin,
2011. 1. 5. 오전 3:01
ċ
lcd4linux.conf
(4k)
Sundew Shin,
2012. 4. 29. 오전 12:34
ċ
uBoot_message.txt
(6k)
Sundew Shin,
2011. 1. 15. 오후 12:27
ċ
webcam.sh
(1k)
Sundew Shin,
2011. 1. 7. 오전 1:57
ĉ
Sundew Shin,
2011. 1. 24. 오전 12:28
Comments