#Install Debian on the Beaglebone Black, along with Go 1.4
##Ingredients:
-
Internet connected computer running Mac OS X (you may substitute some other Unix/Linux box---you'll need enough disk space to hold the Debian image (about 2GB), the ability to fetch content from the Internet, uncompress xz files, and the ability to write the image to a connected MicroSD card)
-
MicroSD card (> 4GB recommended)
-
MicroSD/SD adapter, USB SD card reader, built in SD card reader
-
Beaglebone Black (BBB), connected to your local network via Ethernet.
##Steps:
(1) On the Mac, get the debian image, and unpack it
Mac$ curl http://s3.armhf.com/debian/wheezy/bone/debian-wheezy-7.0.0-armhf-minfs-3.8.12-bone17.img.xz | xz -dc > bone.img
Mac$ curl http://debian.beagleboard.org/images/BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xz
(2) write the image to the microSD
Place the MicroSD card into your Mac, typically via USB or via built-in card reader. You will probably need to place the MicroSD card into a SD card adapter.
Here is a script (makeimage) that writes the image:
#!/bin/sh
if test $# -ne 2
then
echo specify disk and image file 1>&2
exit 1
fi
disk=$1
img=$2
diskutil umount /dev/disk${disk}s1
sudo dd bs=1m if=$img of=/dev/rdisk$disk
diskutil eject /dev/disk${disk}s1
you run it like:
Mac$ makeimage 1 bone.img
The tricky part is the determine the correct disk #. CAUTION getting this incorrect will corrupt your system, so double check, and if you (or I) mess this up, its on you.
(3) Boot from the MicroSD
When the image write is complete, and the MicroSD card has been dismounted, remove the MicroSD from the Mac, place it into a powered-down Beaglebone Black -- you will hear a faint "click" as the card goes into place.
Next, press the BOOT button located by the MicroSD slot, and apply power to the BBB. Note, use a proper power adapter (5VDC, 1000mA), not the supplied USB cable to supply power. This will ensure maximum performance.*
The BBB will boot in under 20 seconds.
(4) log into the freshly booted BBB
If you connected the BBB to a monitor, you will see a login prompt. Login with user name "debian", password "debian". If you booted the BBB headless, you can ssh in from the Mac. The IP address that the BBB responds to will vary with your network configuration.
Mac$ ssh [email protected]
[email protected]'s password: temppwd
(5) Check the disk configuration
When you wrote the Debian image, you only used about 2GB of the MicroSD
debian@debian-armhf:~$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 1.8G 366M 1.3G 22% /
/dev/root 1.8G 366M 1.3G 22% /
devtmpfs 248M 0 248M 0% /dev
tmpfs 50M 220K 50M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 100M 0 100M 0% /run/shm
/dev/mmcblk0p1 1004K 480K 524K 48% /boot/uboot
Here are the disk devices: /dev/mmcblk0 is the device you booted from, the MicroSD. /dev/mmcblk1 is the built-in eMMC.
debian@debian-armhf:~$ ls -l /dev/mm*
brw-rw---T 1 root floppy 179, 0 Jan 1 2000 /dev/mmcblk0
brw-rw---T 1 root floppy 179, 1 Jan 1 2000 /dev/mmcblk0p1
brw-rw---T 1 root floppy 179, 2 Jan 1 2000 /dev/mmcblk0p2
brw-rw---T 1 root floppy 179, 8 Jan 1 2000 /dev/mmcblk1
brw-rw---T 1 root floppy 179, 16 Jan 1 2000 /dev/mmcblk1boot0
brw-rw---T 1 root floppy 179, 24 Jan 1 2000 /dev/mmcblk1boot1
brw-rw---T 1 root floppy 179, 9 Jan 1 2000 /dev/mmcblk1p1
brw-rw---T 1 root floppy 179, 10 Jan 1 2000 /dev/mmcblk1p2
(6) Expand the filesystem
Use fdisk to expand the filesystem to fill the capacity of the card. The fdisk command shows you the full capacity (In my case I used a 16GB card) The sequence below expands the re-partitions the card in-place.
debian@debian-armhf:~$ sudo fdisk /dev/mmcblk0
Command (m for help): p
Disk /dev/mmcblk0: 16.0 GB, 16012804096 bytes
4 heads, 16 sectors/track, 488672 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80000000
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 4095 1024 1 FAT12
/dev/mmcblk0p2 4096 3751935 1873920 83 Linux
Command (m for help): d
Partition number (1-4): 2
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (4096-31275007, default 4096):
Using default value 4096
Last sector, +sectors or +size{K,M,G} (4096-31275007, default 31275007): +14G
Command (m for help): p
Disk /dev/mmcblk0: 16.0 GB, 16012804096 bytes
4 heads, 16 sectors/track, 488672 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80000000
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 4095 1024 1 FAT12
/dev/mmcblk0p2 4096 29364223 14680064 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
debian@debian-armhf:~$ sudo reboot
(7) Complete the expansion
After reboot, expand the file system:
debian@debian-armhf:~$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 3670016 blocks long.
Great. Now we have more space.
debian@debian-armhf:~$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 14G 368M 13G 3% /
/dev/root 14G 368M 13G 3% /
devtmpfs 248M 0 248M 0% /dev
tmpfs 50M 216K 50M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 100M 0 100M 0% /run/shm
/dev/mmcblk0p1 1004K 480K 524K 48% /boot/uboot
(8) make the user account
The next step is to add a user to the newly expanded BBB.
I used the same username as on my Mac because I plan to ssh in.
Having the same username simplifies things.
debian@debian-armhf:~$ sudo adduser ajstarks
Adding user `ajstarks' ...
Adding new group `ajstarks' (1001) ...
Adding new user `ajstarks' (1001) with group `ajstarks' ...
Creating home directory `/home/ajstarks' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for ajstarks
Enter the new value, or press ENTER for the default
Full Name []: Anthony Starks
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
debian@debian-armhf:~$ sudo addgroup ajstarks sudo
Adding user `ajstarks' to group `sudo' ...
Adding user ajstarks to group sudo
Done.
(before9) fix locale ref
(9) login or ssh into the new account, install Go prerequisites, get and unpack the Go source distro.
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install gcc git
wget --quiet --output-document - https://storage.googleapis.com/golang/go1.4.src.tar.gz | tar zxvf -
(10) Install and Test Go 1.4
armhf:~$ cd go
armhf:~/go/src$ ./all.bash
After about 45 minutes you will see a ALL TESTS PASS message. If you don't, figure out why.
Adjust environment
mkdir gopath bin work
This makes the gopath directory, your private bin, and a work area (this is were I test and play with code outside of my GOPATH)
Next, add these lines to /.profile
export GOPATH=/gopath
PATH=$PATH:~/go/bin:$GOPATH/bin
and make them active:
armhf:~$ . ~/.profile
armhf:~$ go version
go version go1.4 linux/arm
(11) test build (ts.go)
Instead of the typical hello world program, I use a short program that searches twitter. It's more fun and exercises facilities like networking. Get ts.go from https://gist.github.com/ajstarks/3760929
ajstarks@debian-armhf:~$ cd ~/work
ajstarks@debian-armhf:~/work$ go build -o ~/bin/ts ts.go
ajstarks@debian-armhf:~/work$ ts \#golang
(12) Install packages from the net
ajstarks@debian-armhf:~/work$ go get github.com/ajstarks/svgo
ajstarks@debian-armhf:~/work$ go install github.com/ajstarks/svgo/...
ajstarks@debian-armhf:~/work$ android
##References:
http://www.armhf.com/index.php/expanding-linux-partitions-part-2-of-2/
Upgrade kernel
$ wget --no-check-certificate https://rcn-ee.net/deb/wheezy-armhf/v3.8.13-bone68/install-me.sh
$ chmod +x install-me.sh
$ ./install-me.sh
$ reboot
$ uname -a