Bricked? Actually not.

Yesterday I install wicd, a tool for automatically configure the wired and wireless network, but unfortuately it didn’t act proper, then made my pogoplug into a brick-like equipment, I can only log into the terminal for less than 15 seconds, then I will lose the ssh connection. How to de-brick this equipment?
###Solution A In the 15 seconds living terminal, quickly input following command, this will remove the wicd and use the previous configuration of the network.

	$ yes | apt-get remove wicd &

You should wait for a long time, better longer than 5 mins, next time when you reboot into the system, it will recover to previous configuration. ###Solution B Use serial port.
In this solution you will need a USB-TTL line to connect to pogoplug’s serial port. Use serial port connection will not consider the network configuration. In the serial terminal, simply remove the installed wicd package is OK. ###Solution C Change the configuration of startup application.
Navigate yourself to /etc/rc3.d/, you will see several links in this folder, change the S30wicd to K30wicd.
S mean service, while K means we disable this. The names of these links all start as either K or S, followed by a number. If the name of the link starts with an S, then that indicates the service will be started when you go into that run level. If the name of the link starts with a K, the service will be killed (if running).
Reboot and then we will fall back to previous IP address again.

Things to be done(2)

Following things got to be done in recent days:

  • Try different distribution and found the difference and package differences between them(edubuntu, opensuse, fedora, etc).
  • Django/mezzanine, and other python based web development framework.
  • Write your own django based or mezzenine based blog/CMS.
  • __Repair my own computer, and run some cloud on it. __
  • __Pogoplug own kernel image compilation. __
  • RaspberryPI own distribution developement.
  • __Download all of the Full Circle using my own script, use it for practicing programming skills. __

Wireless on PogoPlug

###Hardware Preparation Insert the usb wireless card and view the dmesg information:

	$ dmesg | tail
	[911884.740000] usb 1-1.3: USB disconnect, device number 4
	[911897.530000] usb 1-1.4: new high speed USB device number 5 using oxnas-ehci
	[911897.640000] usb 1-1.4: New USB device found, idVendor=0bda, idProduct=8179
	[911897.640000] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
	[911897.650000] usb 1-1.4: Product: 802.11n NIC
	[911897.650000] usb 1-1.4: Manufacturer: Realtek
	[911897.660000] usb 1-1.4: SerialNumber: 00E04C0001
The model is Mercury FW150US, See details of the lsusb
	$ lsusb -v -d 0bda:8179
	Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp. 
	......

But the output didn’t show its information, we google it, knows:
只是一个8176和8179之分,后来才知道原来这款瑞昱的芯片有两个版本,8176对应的是rtl8192cu,8179对应的是rtl8188eu。
8179 is the rtl8188eu, so we need to find rtl8188eu device driver.
###Driver Preparation Prepare the cross-compiler, download “gcc-linaro-arm-linux-gnueabi-2012.02-20120222_linux.tar.bz2”, uncompress it and add it into your system path.
Prepare the Linux source code, named “linux-3.1.10.pogoplug.tar.bz2”, uncompress it.
How do we get the cross-compiler version?

	$ cat /proc/version
	Linux version 3.1.10 (lintel@lintel-ThinkPad-T430) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #10 SMP PREEMPT Fri Jun 7 19:14:08 CST 2013

From the result, we know the cross-compiler is 4.6.3 version.
Download the corresponding cross-compiler and add it to the sytem path. Then we download the PogoPlug Linux Source, uncompress it and also get the rtl8188eu from https://github.com/Red54/linux-shumeipai2/tree/sunxi-3.0/drivers/net/wireless/rtl8188eu, copy the rtl8188eu’s driver under driver/net/wireless, then modify the Kconfig file:

	\+source "drivers/net/wireless/rtl8192cu/Kconfig"
	source "drivers/net/wireless/rtl8188eu/Kconfig"

and also the Makefile:

	obj-$(CONFIG_RTL8192CU)  += rtl8192cu/
	\+obj-$(CONFIG_RTL8188EU)  += rtl8188eu/
	obj-$(CONFIG_IPW2100) += ipw2x00/
	obj-$(CONFIG_IPW2200) += ipw2x00/

Then, we get the running kernel’s configuration file via:

	cat /proc/config.gz | gunzip >running.config

upload the configuration file to the directory of the kernel source, then

	$ export ARCH=arm
	$ export CROSS_COMPILE=arm-linux-gnueabi-
	$ make  ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
	in menuconfig, load the running.config, then navigate to driver->net->wireless, choose rtl8188eu's driver, compile it to kernel
	$ make  ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
	$ sudo yaourt mkimage
	Install mkimage, then go to arch/arm/boot
	$ mkimage -n 'linux-3.1.10' -A arm -O linux -T kernel -C none -a 0x60008000 -e 0x60008000 -d zImage uImage

upload the generated uImage to pogoplug, then we have to update the kernel image into our own image

	# Install mtd-utils first
	$ apt-get install mtd-utils
	# Erase the mtd partition which contains existing kernel
	$ /usr/sbin/flash_erase /dev/mtd1 0xB00000 22
	# Write newly generated uImage into the mtd partition
	$ /usr/sbin/nandwrite -p -s 0xB00000 /dev/mtd1 /root/uImage	

Reboot the pogoplug. ###Wireless Configuration On pogoplug, install following software:

	$ apt-get install iw wireless-tools 

Use wpa_supplicant to generate the configuraiton file and generate the password

	wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
	wpa_passphrase NETGEAR79 xxxxxx > /etc/wpa_supplicant/NETGEAR79.conf

With the generated file we can directly connect to the exisint wireless network.
Then we have to update the network configration file,

	$ vim /etc/network/interfaces
	auto lo eth0
	iface lo inet loopback
	iface eth0 inet dhcp
	
	auto wlan0
	allow-hotplug wlan0
	iface wlan0 inet dhcp
	wpa-conf /etc/wpa_supplicant/NETGEAR79.conf

After everything is done, we can remove the wired connection, and change the wired-bind ip address to wireless binded ip address, everything will be the same as before. But the bootup may be 1 or 2 seconds than the wired connection.

Use Xapian for creating a local search engine

###Install Xapian-core Xapian-core is the Xapian library itself. We have to install it from source-code

	$ wget http://oligarchy.co.uk/xapian/1.2.15/xapian-core-1.2.15.tar.gz
	$ tar xzvf xapian-core-1.2.15.tar.gz && cd xapian-core-1.2.15/
	$ ./configure --prefix=/usr/local && make && make install

###Install Omega Omega utilities is an application built on Xapianm, consisting of indexers and a CGI search frontend.

	$ wget http://oligarchy.co.uk/xapian/1.3.1/xapian-omega-1.3.1.tar.gz
	$ tar xzvf xapian-omega-1.3.1.tar.gz &&  cd xapian-omega-1.3.1/
	$ ./configure --prefix=/usr/local && make && make install

###Configure the CGI for apache Change the “ScriptAlias /cgi-bin/ “/usr/lib/cgi-bin/"", so the httpd knows cgi binaries is put in the /usr/lib/cgi-bin directory. Then we have to copy the omega library to the /usr/lib/cgi-bin/:

	$ cd xapian-omega-1.3.1/
	$ cp omega /usr/lib/cgi-bin/omega.cgi
	$ cp omega.conf /usr/lib/cgi-bin/
	$ chmod 755 /usr/lib/cgi-bin/omega.cgi

The Configuration file /usr/lib/cgi-bin/omega.conf should looks like this:

	database_dir /var/lib/omega/data
	template_dir /var/lib/omega/templates
	log_dir /var/log/omega
	cdb_dir /var/lib/omega/cdb

Copy the templates to the new directory:

	$ cd xapian-omega-1.3.1/
	$ cp -ar /templates/* /var/lib/omega/templates/
	$ mkdir -p /var/lib/omega/data/default
	$ chmod -R 644 /var/lib/omega/data/default

Generate the database file:

	$ sudo /usr/local/bin/omindex --db /var/lib/omega/data/default --url / /home/Trusty/code/octo/debian_octopress/public/

###Result Restart the httpd daemon:

	$ systemctl restart httpd

Browser http://localhost/cgi-bin/omega.cgi you will see the following picture:

/images/xapian.jpg

Alt text

Using wicd with Awesome

###Install packages Install the following packages

	$ sudo pacman -S wicd
	$ sudo pacman -S wicd-gtk
	$ sudo pacman -S notification-daemon
	$ sudo pacman -S python2-notify

###Configure Add your account to users group

	# gpasswd -a USERNAME users

Start Wicd as System Service:

	$ systemctl start wicd.service

Automatically start service at boot-up:

	$ systemctl enable wicd.service

Add the wicd-client as tray in the rc.lua file

	$ wicd-client --tray