In short:
sudo ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ sudo ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/
tools/android update sdkWith the UI, I selected to install:
Stopping ADB server failed (code -1).I will ignore it for now. The whole stuff is consuming around 307 megs at the moment.
cd tools ./android list targetsAnd I created a project:
./android create project --target "android-10" --name HelloWorldApp \ --path ~/Documents/android/workspace/HelloWorldApp \ --activity MainActivity --package eu.lakat.example.helloworldappLet's go back to the "root":
cd ..I created a small script, to include all the paths in one shot:
export PATH=$PATH:"$(pwd)/android-sdk-linux/tools/":"$(pwd)/android-sdk-linux/platform-tools/"Changed the directory to the applications:
cd workspace/HelloWorldApp/Compiled it to debug:
ant debugAnd installed it on my device:
adb install bin/HelloWorldApp-debug.apkEverything worked perfectly fine, I found the app in my device, and was able to run that easily. Cool!
android avdUse th UI to create a new device, and simply execute:
adb install bin/HelloWorldApp-debug.apk
apt-get --no-install-recommends install nfs-kernel-serverLet's see what do I have:
root@plugged:~# lsmod | grep nfs
nfsd 243695 11 exportfs 3108 1 nfsdSo, next step is to export a directory. I would like to create a read-only export.
cat /etc/exports
/mnt/md2 192.168.0.2(ro,no_subtree_check)TODO: Some security Okay, so let's restart the nfs server:
/etc/init.d/nfs-kernel-server stop /etc/init.d/nfs-kernel-server startInstall the client on the other machine:
sudo apt-get --no-install-recommends install nfs-commonAnd mount the export:
sudo mount 192.168.0.4:/mnt/md2 /mnt/md2It does not seem to perform very well. For example, from the client, through wifi:
time ls -la /mnt/md2/1/ > /dev/nullGives
real 1m18.605s user 0m0.560s sys 0m2.632sWhereas running the same stuff on the DreamPlug:
real 0m2.572s user 0m1.650s sys 0m0.920sAnd that's fast. Let's try to dd some files.
dd if=/mnt/md2/1/ffc4f5bc7f6b78ac371f3ecebdd9701e4cb8c68f of=/dev/nullGives:
577409024 bytes (577 MB) copied, 103.255 s, 5.6 MB/sAnd what is the raw speed? On the server:
nc -l -p 4545 -q 1 < /mnt/md2/1/ffc4f5bc7f6b78ac371f3ecebdd9701e4cb8c68fOn the client:
nc 192.168.0.4 4545 | dd of=/dev/nullAnd the results:
577409024 bytes (577 MB) copied, 103.84 s, 5.6 MB/sSo nfs gives almost no overhead. (Please note, that the 1 sec was the waiting time added by the netcat server. That's negligable.) Let's see the same thing locally on the server:
dd if=/mnt/md2/1/ffc4f5bc7f6b78ac371f3ecebdd9701e4cb8c68f of=/dev/nullResult:
577409024 bytes (577 MB) copied, 19.4105 s, 29.7 MB/sNFS over a gigabit connection (after umount-mount, to clear the cache):
577409024 bytes (577 MB) copied, 24.6491 s, 23.4 MB/sWithout NFS (nc way):
577409024 bytes (577 MB) copied, 20.9865 s, 27.5 MB/sSo yes, NFS has some overhead at these rates.
sudo mdadm --assemble /dev/md0 /dev/sdb1This printed out the following:
mdadm: /dev/md0 assembled from 1 drive - need all 2 to start it (use --run to insist).Let's see the status:
cat /proc/mdstatGives me:
md0 : inactive sdb1[1](S) 625129216 blocksOkay, so this array definitely needs activation. I decided to run this array:
sudo mdadm --run /dev/md0And now, let's see the status:
cat /proc/mdstatIt seems, that the device is now active.
md0 : active raid1 sdb1[1] 625129216 blocks [2/1] [_U]I expected to see a read only mode, and it is a bit annoying, that it seems that it is not r/o. Now, I try to set it to read-only:
sudo mdadm --readonly /dev/md0And now, it seems better:
cat /proc/mdstatshows:
md0 : active (read-only) raid1 sdb1[1] 625129216 blocks [2/1] [_U]And now, it is time to mount it!
sudo mount --read-only /dev/md0 /mnt/p1The good stuff, is that I managed to mount it, and hopefully, as I put it back to its original place, it will still be fine.
sudo mdadm --detail /dev/md0See the "Update Time" (which is exactly the date, when I last accessed the array)
/dev/md0: Version : 0.90 Creation Time : Wed Nov 21 22:52:49 2012 Raid Level : raid1 Array Size : 625129216 (596.17 GiB 640.13 GB) Used Dev Size : 625129216 (596.17 GiB 640.13 GB) Raid Devices : 2 Total Devices : 1 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Thu Nov 22 07:10:02 2012 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 UUID : 9d82c2e5:33bd53b5:e4d1075c:94619d7b Events : 0.40 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 17 1 active sync /dev/sdb1
ssh 192.168.0.4 mkfs.ext3 /dev/sda2 ssh 192.168.0.4 mount /dev/sda1 /mnt/sda1 ssh 192.168.0.4 mount /dev/sda2 /mnt/sda2 sudo kpartx -av debian.phase2.img sudo mount /dev/mapper/loop0p2 p2 cd p2 sudo tar -czf - . | ssh 192.168.0.4 "cd /mnt/sda2 && tar -xzf -" cd .. sudo umount p2 sudo mount /dev/mapper/loop0p1 p1 scp p1/uImage 192.168.0.4:/mnt/sda1/uImage2 sudo umount p1 ssh 192.168.0.4 syncReboot the plug, and go to uBoot. Remove all USB drives.
setenv x_bootcmd_kernel fatload usb 0 0x6400000 uImage2 setenv x_bootargs_root root=/dev/sda2 rootdelay=10 panic=10 saveenvExtract the libs:
mkdir libs cd libs/ sudo tar -xzf ../sda2.tgz cd lib/modules sudo tar -czf - . | ssh 192.168.0.4 "cd /lib/modules && tar -xzf -"
LANG="C"- /etc/hostname - /etc/apt/sources.list
deb http://mirrors.kernel.org/debian squeeze main contrib non-free deb http://security.debian.org squeeze/updates main contrib non-free- /etc/network/interfaces
auto lo eth1 iface lo inet loopback iface eth1 inet dhcp- start network
dhclient eth1- update
apt-get update apt-get upgrade- install openssh
apt-get --no-install-recommends install openssh-server
sudo apt-get install debootstrap sudo mkdir rootfs sudo debootstrap --verbose --foreign \ --arch armel squeeze rootfs \ http://mirrors.kernel.org/debianThe root filesystem is not yet ready. As the kernel does not contain the udev system, if this root filesystem were booted, the following message would appear followed by a shutdown:
Warning: unable to open an initial console.To avoid this, let us create the generic devices:
( cd rootfs sudo MAKEDEV generic )Now, it is time to create an 1G image:
dd if=/dev/zero of=debian.img bs=1024 count=1000000Set up this disk as a disk device, and partition it.
sudo apt-get install kpartx sudo kpartx -av debian.img ( cat << EOF ,100,6 ,,83 EOF ) | sudo sfdisk /dev/loop0 -u M -DAnd so I created two primary partitions: 100M FAT16, and the rest as type LINUX. Let's unplug, and replug the device, so partitions are recognised:
sudo kpartx -d debian.img sudo kpartx -av debian.imgFrom this point the two partitions are available as /dev/mapper/loop0p1 and /dev/mapper/loop0p2. Now I need to format the filesystems:
sudo mkfs.vfat /dev/mapper/loop0p1 sudo mkfs.ext3 /dev/mapper/loop0p2 sudo e2label /dev/mapper/loop0p2 pluggedrootPlace the kernel image to the first partition:
sudo mkdir p1 sudo mount /dev/mapper/loop0p1 p1 wget -O - \ http://dreamplug.googlecode.com/files/uImage-DreamPlug%20v9 | sudo dd of=p1/uImage sudo umount p1Please note, that although there is a newer kernel available, I am still using an elder one, because otherwise, the dmesg is full with messages related to gpio. The version that I have is:
Linux xxx 2.6.33.7-dirty #1 PREEMPT Tue Nov 29 06:13:06 EST 2011 armv5tel GNU/LinuxNow, copy the root filesystem to the second one:
sudo mkdir p2 sudo mount /dev/mapper/loop0p2 p2 sudo tar -cf - rootfs | sudo tar -xf - -C p2/ --strip-components=1 sudo umount p2We can disconnect the virtual disk, and the partition mappings
sudo kpartx -d debian.imgLet us put it on a physical device:
time sudo dd if=debian.img of=/dev/sdb bs=1048576That took around 40 seconds on my machine, using a Flash Voyager GT
976+1 records in 976+1 records out 1024000000 bytes (1.0 GB) copied, 38.7155 s, 26.4 MB/s real0m38.734s user0m0.000s sys0m1.504s
setenv x_bootcmd_kernel fatload usb 2:1 0x6400000 uImage setenv x_bootargs_root root=/dev/sdc2 rootdelay=10 panic=10 init=/bin/bashI also tried to specify root="LABEL=pluggedroot" but that failed. After it booted up, I finished the debootstrap:
/debootstrap/debootstrap --second-stageYou should see some lines showing up, and the latest is:
I: Base system installed successfully.The serial console needs to be set:
echo 'T0:2345:respawn:/sbin/getty -L ttyS0 115200 linux' >> /etc/inittabAs well as the root password (I set it to the standard nosoup4u):
passwd rootReally important to flush the changes made to the filesystem:
syncAnd leave the shell simply with:
exitAt this point, I disconnected my USB drive, and made a backup of it. With this action, I will have a snapshot, that could be easily modified according to my needs.
sudo dd if=/dev/sdb of=debian.phase2.img bs=1024 count=1000000Boot to the new stuff. There is one thing that is interesting:
modprobe: FATAL: Could not load /lib/modules/2.6.33.7-dirty/modules.dep: No such file or directoryThat needs to be fixed. The operating system's configuration will be covered in the next post.
the gpio timer is called ! time is 211This is somewhat really annoying, so I decided to try to install a fresh debian. The instructions I used for the update are: Update guide
sudo gpasswd dialout -a matelakatAnd as I don't want to log on/off, I activated the group memberships:
newgrp dialoutAnd off you go, I just had to start minicom:
minicomLet's make booting a bit faster. See here. I will make a note of my original bootcommand here (The whole stuff needs to be one line!)
bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact egiga1; ${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;And so it is modified to:
${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;With this:
Marvell>> setenv bootcmd '${x_bo...And save the stuff:
Marvell>> saveenvAnd reset
Marvell>> resetSo that the device will boot significantly faster.
xmodmap -e "keycode 94 = backslash bar backslash bar U00171 U00170 d"So that when I press Right Alt + \ I have my ű, with Shift, I have my Ű
Special thanks goes to: Black Eternal and Bill Beiga
tmux list-panesSelect a pane
tmux select-pane -t 0Send Ctrl-P and Ctrl-N to pane #1
tmux send-keys -t 1 C-p C-m
you will need gvim to do these things
Start vim as a servervim --servername "coding"Send a message to vim
vim --servername "coding" --remote-send '<Esc>:!ls<CR>'
python - << EOF from os.path import dirname, join import svn dist_packages_dir = dirname(dirname(svn.__file__)) print 'cp -r', ' '.join( [join(dist_packages_dir, lib) for lib in ['svn', 'libsvn']]),\ "yourvirtualenvssitepackagesdir" EOFAnd replace yourvirtualenvssitepackagesdir with the site packages dir of your virtualenv
hciconfig
hcitool scan
Scanning ... 00:02:76:25:A2:23ThinkPad Bluetooth Laser Mouse
echo "0000" | bluez-simple-agent hci0 00:02:76:25:A2:23
RequestPinCode (/org/bluez/899/hci0/dev_00_02_76_25_A2_23) Enter PIN Code: Release New device (/org/bluez/899/hci0/dev_00_02_76_25_A2_23)
dbus-send --system --type=method_call --print-reply --dest=org.bluez "/" org.bluez.Manager.ListAdapters
dbus-send --system --type=method_call --print-reply \ --dest=org.bluez "/org/bluez/899/hci0/dev_00_02_76_25_A2_23" \ org.bluez.Device.SetProperty \ string:Trusted variant:boolean:true
sudo hidd --connect 00:02:76:25:A2:23
TowelStuff/ bin/ CHANGES.txt docs/ LICENSE.txt MANIFEST.in README.txt setup.py towelstuff/ __init__.py location.py utils.py test/ __init__.py test_location.py test_utils.pyAnd your setup.py should look like this:
from setuptools import setup setup( name="TowelStuff", version="0.1", packages=["towelstuff"], install_requires=["nose"] )The other question: What should the subversion structure look like? I looked the Trac guys, to see how they do:
http://svn.edgewall.org/repos/trac/trunk/ ... trac setup.py ...So I will use the same setup.
~/.subersion/configbut IDEA won't pick that up. Use the global config file instead:
$ grep -B1 222 /etc/subversion/config
[tunnels] sshtunnel = ssh -p 2222
svn ls svn+sshtunnel://HOSTNAME/repolocation
sudo apt-get install openswanI choose not to generate a certificate.
/etc/ipsec.conf /etc/ipsec.d/certs /etc/ipsec.secrets /etc/ipsec.d/private/Instructions:
ipsec setup --stop ipsec setup --start ipsec auto --up connection_name
wmname LG3D unset AWT_TOOLKIT ./appCredits should go to these pages:
hg clone http://hg.suckless.org/dwm cd dwm sudo apt-get install libxinerama-dev sudo make clean install cat /usr/share/xsessions/dwmcustom.desktop
[Desktop Entry] Encoding=UTF-8 Name=DwmCustom Comment=Dynamic window manager Exec=/usr/local/bin/dwm Icon=dwm Type=XSessionThat's all you need to have your custom dwm compiled.
wpa_passphrase ssid passphrase > /etc/wpa_supplicant/wpa_supplicant.conf wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf & dhclient wlan0
seq 1 1000 > testfile sync hdparm --fibmap testfile
testfile: filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 29868576 29868583 8
hdparm --read-sector 29868576 /dev/sda
/dev/sda: reading sector 29868576: succeeded 0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38 0a39 3031 310a 0a31 3231 310a 0a33 3431 ...
rm testfile sync
/dev/sda: reading sector 29868576: succeeded 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ...
echo noop > /sys/block/sdX/queue/schedulerSources:
[root@alarm ~]# cat /etc/mdadm.conf | grep DEVICE DEVICE /dev/null
.../lettuce/terminal.py", line 82, in get_terminal_size_unix return int(cr[1]), int(cr[0]) TypeError: int() argument must be a string or a number, not 'NoneType'
@step(u'And give me IPython') def and_continue_here(step): import IPython import sys shell = IPython.InteractiveShell() ip = IPython.core.ipapi.get() p = IPython.core.debugger.Pdb(ip.colors) p.reset() p.interaction(sys._getframe(0), None)