aboutsummaryrefslogtreecommitdiffstats
path: root/freedom-maker/README
diff options
context:
space:
mode:
authorficus <ficus@robocracy.org>2012-09-22 18:07:42 +0200
committerficus <ficus@robocracy.org>2012-09-22 18:07:42 +0200
commite2973e8ea5c57bfa6ed41293e0250c68d29cfed9 (patch)
treec198195bfc91800d93300788c85efba3feaaa050 /freedom-maker/README
parente6d4f095e61d0c875a11cec57302db9f2fd5838f (diff)
downloadtorouter-e2973e8ea5c57bfa6ed41293e0250c68d29cfed9.tar.gz
torouter-e2973e8ea5c57bfa6ed41293e0250c68d29cfed9.zip
backup WIP
Diffstat (limited to 'freedom-maker/README')
-rw-r--r--freedom-maker/README418
1 files changed, 0 insertions, 418 deletions
diff --git a/freedom-maker/README b/freedom-maker/README
deleted file mode 100644
index 6039861..0000000
--- a/freedom-maker/README
+++ /dev/null
@@ -1,418 +0,0 @@
-Freedom-Maker - Bdale's building tools for the FreedomBox project
-
-Welcome to the FreedomBox! This project is the central hub of the FreedomBox
-project, it builds and installs the file-system image that turns any computer
-into a FreedomBox.
-
-There are a couple ways to use this system:
-
-1. If you just want to use a FreedomBox and don't care about changing how it
- works or mucking about in its insides (if you're like most people), you
- should get a pre-built image from someone and copy it to an SD card or USB
- drive. If you don't have a JTAG or don't know what one is, make sure to ask
- for the SD card image.
-
-2. If you want to change and build on it, you can use:
-
- A. A USB stick. This requires a JTAG, but doesn't require opening up the
- DreamPlug, or,
-
- B. A microSD card and adapter. You can use the one from inside the
- DreamPlug. You won't need a JTAG, but you will need to open the DreamPlug
- and void the warranty.
-
-***
-*** Warning! There are no "training wheels" here .. read the scripts and
-*** understand what they're going to do before you run them...
-***
-
-# Recent Firmware Necessary!
-
-Modern kernels need a relatively recent version of the u-boot firmware. If
-you still use old firmware (including what Global Scale ships on the units by
-default), then you need to update, which requires having the JTAG dongle (to
-gain console serial port access). One way to know you've got old firmware
-is if booting a Linux kernel results in errors about corrupt gzip data and
-a failure to launch the kernel.
-
-Note that re-flashing firmware will erase all configuration variables. If
-preserving your exising boot config is important, use printenv and make notes
-before proceeding. Also note that any time you're re-flashing boot firmware,
-there is a slight chance you could 'brick' your device leaving it unbootable.
-If that happens, the JTAG interface can be used to recover.
-
-The instructions for updating firmaware go something like this (thanks to
-Ian Campbell for his notes):
-
- Using 2012.04.01-2 which is current Wheezy. Prep by mounting a USB stick.
-
- wget http://http.debian.net/debian/pool/main/u/u-boot/u-boot_2012.04.01-2_armel.deb
- dpkg-deb -x u-boot_2012.04.01-2_armel.deb u-boot_2012.04.01-2_armel
- cp u-boot_2012.04.01-2_armel/usr/lib/u-boot/dreamplug/* /media/usbdisk
-
- Move the USB stick to your DreamPlug. Flash the new firmare:
-
- usb start
- fatload usb 2 0x6400000 u-boot.kwb
- sf probe 0
- sf erase 0x0 0x80000
- sf write 0x6400000 0x0 0x${filesize}
-
- (You must, of course, fill in the size of the file you're loading in hex)
-
-At this point, you should be able to reset the DreamPlug and have it boot to
-a serial console prompt. If that fails, you'll need real JTAG magic to try
-again.
-
-Note that if you use the 'make usb' target to create a bootable USB stick
-image, we include the required firmware in /boot/dreamplug, so the above
-fatload command might be replaced with:
-
- fatload usb 2 0x6400000 dreamplug/u-boot.kwb
-
-# To Use It
-
-You'll need to copy the image to the memory card or USB stick:
-
-1. Figure out which device your card actually is.
-
- A. Unplug your card.
-
- B. Run "df" to show you the list of devices your computer actually knows
- about.
-
- C. Plug your card in.
-
- D. Run "df" again, your computer should know about a new device or two: your
- memory card. It's probably "/dev/sd(someletter)". It *won't be*
- /dev/sda.
-
-2. Decompress the image:
-
- $ tar -xjvf freedombox-unstable_*.tar.bz2
-
-3. Copy the image to your card. Whatever you do, make sure you don't copy it to
- /dev/sda. That'll break your system.
-
- # dd bs=1M if=freedombox-unstable_*.img of=/dev/sd(thesameletter)
-
- When picking a device, use the drive-letter destination, like /dev/sdb, not a
- numbered destination, like /dev/sdb1. The device-without-a-number refers to
- the entire device, while the device-with-a-number refers to a specific
- partition. We want to use the whole device.
-
-Now, what you need to do depends on whether you're using the microSD card or USB
-stick method:
-
-- USB drive: You'll hook the JTAG up to the DreamPlug before booting and use the
- JTAG to control the boot process, so we can boot from the USB drive.
-
-- microSD card: You'll put the microSD card into the DreamPlug's internal
- microSD card slot and boot the DreamPlug. It'll restart once to finish the
- install process, then it's ready to use.
-
-## Running from a microSD Card
-
-When DD has finished, take the microSD card out of your computer and plug it
-into your DreamPlug. If you have a JTAG, you can watch it boot. You'll see it
-restart once during the boot process. If you don't have a JTAG, wait a while (5
-minutes or less) and it'll be available over SSH (port 22). You might need to
-use nmap to find it:
-
- $ nmap -p 22 --open -sV 192.168.0.0/24
-
- ...
- Interesting ports on 192.168.0.13:
- PORT STATE SERVICE VERSION
- 22/tcp open ssh OpenSSH 6.0p1 Debian 2 (protocol 2.0)
- Service Info: OS: Linux
- ...
-
-Once you've found it, SSH into the box:
-
- $ ssh root@192.168.0.13
-
-## Running from a USB Stick
-
-Move the USB stick to the DreamPlug, obtain a serial console, and hit reset. A
-good way to access the serial console (actually USB serial emulation provided by
-the optional JTAG dongle), is to use 'screen', like so:
-
- screen /dev/ttyUSB0 115200
-
-Interrupt the boot by pressing a key during the autoboot countdown, and type the
-following to boot from the USB stick:
-
- setenv bootcmd '${x_bootcmd_usb}; ${x_bootcmd_kernel}; ${x_bootcmd_initrd}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000 0x6900000;'
- setenv x_bootcmd_kernel fatload usb 2 0x6400000 uImage
- setenv x_bootcmd_initrd fatload usb 2 0x6900000 uInitrd
- setenv x_bootargs_root root=/dev/sdc2 rootdelay=10
- boot
-
-The system should boot to a login prompt, using only the bits on the stick.
-
-The default root password is 'freedom'. The normal user is "fbx" and the
-password is "frdm".
-
-- - - - -
-
-To set things up to boot from the internal microSD card, once you're logged into
-the system booted from root on USB stick you can use:
-
- /sbin/copy2dream
-
-Note that if you don't have a reasonable system date and time set in the
-DreamPlug before running this command, you may see a long stream of warnings
-from tar about timestamps being in the future. It is safe to ignore these.
-
-On reboot, you may want to interrupt the boot and type the following to ensure
-you boot from the internal microSD by default. This bootcmd line elides the
-time-consuming attempts to boot grom gigE, which makes boot go much faster:
-
- setenv bootcmd '${x_bootcmd_usb}; ${x_bootcmd_kernel}; ${x_bootcmd_initrd}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000 0x6900000;'
- setenv x_bootcmd_kernel fatload usb 0 0x6400000 uImage
- setenv x_bootcmd_initrd fatload usb 0 0x6900000 uInitrd
- setenv x_bootargs_root root=/dev/sda2 rootdelay=10
- saveenv
- reset
-
-# To Make It
-
-If you want to build your own image yourself, you're more than welcome to.
-Whether you're using a USB drive or a microSD card, you'll need to ensure that
-it's at least 2 GB in size and that it has two partitons:
-
-1. The stick must start with a 128 MB FAT partition for the boot directory.
-
-2. The rest of the stick is an EXT2 partition, for the main installation.
-
-The rest of the steps you need to follow depend on whether you're using a USB
-stick or a microSD card.
-
-## Building on a USB Stick
-
-Partition a USB stick to have a small FAT partition and large ext2 partition,
-create a /media/freedom mount point, and add entries to /etc/fstab like:
-
- /dev/sdb1 /media/freedom/boot vfat user,noauto 0 0
- /dev/sdb2 /media/freedom ext2 user,noauto 0 0
-
-This will allow the Makefile to mount and unmount the stick at will.
-
-If you have a favorite Debian mirror, update the file fbx-base.conf setting the
-source= line.
-
-To populate the stick with bits for a DreamPlug, just plug it in to your
-computer and type:
-
- make
-
-This will build a file tree under build/dreamplug, representing the contents of
-a root file system, then that content will be copied to the stick.
-
-## Building it on a microSD card.
-
-Changing the image and building your own is a simple 18 step process! Lots of
-thanks to Nick Hardiman for putting these instructions together.
-
-### Get Ready
-
-1. Start your workstation.
-
-2. Use a Debian OS, the version doesn't matter. A virtual image, such
- as a VirtualBox image, is fine. Usually.
-
-3. Use the root account.
-
-### Prepare an SD Card
-
-4. Find a microSD card with SD card holder. It must be at least 2GB
- in size.
-
-5. Insert the card into your workstation.
-
-6. Install a partition editor. Install parted if you are a masochist.
-
- # apt-get install parted
-
-7. Create 2 partitions. Use cfdisk, parted, gparted or similar.
-
- # cfdisk /dev/sdb
-
- a. First partition: 128meg (no smaller or the kernel copy will run
- out of room and make - see below - will end with an error).
-
- b. Second partition: The rest of the card (anything over 600 MB
- should work).
-
-8. Make a note of the SD card’s device name. Mine is /dev/sdb (my
- workstation’s layout is simple: one disk called /dev/sda and
- nothing else defined).
-
-9. Format the two partitions.
-
- a. First partition: FAT
-
- # mkdosfs /dev/sdb1
-
- b. Second partition: ext3
-
- # mkfs.ext3 /dev/sdb2
-
-10. Create the mountpoints on your workstation.
-
- # mkdir -p /media/freedom/boot
-
-11. Mount the second partition.
-
- # mount /dev/sdb2 /media/freedom/
-
-12. Mount the first partition.
-
- # mount /dev/sdb1 /media/freedom/boot/
-
-13. Check your work.
-
- # mount
-
- sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
- ...
- /dev/sdb2 on /media/freedom type ext3
- (rw,relatime,errors=continue,barrier=1,data=ordered)
- /dev/sdb1 on /media/freedom/boot type vfat
- (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro)
-
-### Clone the Git Repository
-
-14. Install git.
-
- # apt-get install git
-
- Reading package lists... Done
- ...
- After this operation, 15.3 MB of additional disk space will be used.
- Do you want to continue [Y/n]?
- ...
-
-15. Clone Nick Daly’s repository.
-
- $ git clone https://github.com/NickDaly/freedom-maker.git
-
- Cloning into 'freedom-maker'...
-
-
-### Create the Debian OS.
-
-16. Change to the new directory.
-
- $ cd ~/freedom-maker/
-
-17. Kick off:
-
- $ make weekly-card
-
-18. Enter your password when asked by "sudo". If that fails, run:
-
- $ su -c "make weekly-card"
-
-If you do that, you'll need to enter the root password to build the image.
-
-The next part took about an hour, but required no input from me. Packages were
-downloaded. Lots of commands were run. Many harmless errors were ignored:
-
- sysvinit: restarting...init: timeout opening/writing control channel /run/initctl
- .init: timeout opening/writing control channel /run/initctl
- ...
-
-There was good news:
-
- Multistrap system installed successfully...
- Copying the source directory to the FreedomBox root.
-
-There was an enormous amount of this:
-
- bin/bash
- 818092 100% 7.07MB/s 0:00:00 (xfer#1, to-check=1102/1123)
- bin/cat
- 42736 100% 362.91kB/s 0:00:00 (xfer#2, to-check=1101/1123)
- bin/chgrp
- 54996 100% 383.62kB/s 0:00:00 (xfer#3, to-check=1100/1123)
- ...
-
-Finally an image is copied and zipped up for redistribution:
-
- dd if=/dev/sdb of="freedombox-unstable_`date +%Y.%m%d`.img" bs=1M
- 3781+1 records in
- 3781+1 records out
- 3965190144 bytes (4.0 GB) copied, 266.174 s, 14.9 MB/s
- Image copied. The microSD card may now be removed.
- tar -cjvf "freedombox-unstable_`date +%Y.%m%d`.tar.bz2"
- "freedombox-unstable_`date +%Y.%m%d`.img"
- freedombox-unstable_2012.0705.img
-
-The end. Hooray! The SD card is ready for the DreamPlug.
-
-# To Understand It
-
-Be aware that this is a *very* imcomplete solution for now, suitable only
-for developers .. you will want to at least do things like create unique
-ssh host keys for your device!
-
-Digging into the code should be fairly straightforward. There are only six
-files you need to be aware of:
-
-- /Makefile: The makefile that describes and builds the system.
-- /mk_dreamplug_rootfs: Builds the DreamPlug's root file-system.
-- /bin/projects: The place for external projects to hook into and customize
- themselves before they're copied to the image.
-- /bin/finalize: Finalizes and prepares the build for booting.
-- /source: The root file system.
-- /source/install.sh: Pre-boot configuration that needs to be run on the device
- itself (from within a chroot).
-
-## Makefile
-
-There are three major targets to be aware of:
-
-- dreamstick: The default target. This loads an image to a USB drive that can
- be used to install the FreedomBox without opening up your DreamPlug and
- voiding the warranty. You'll need a JTAG, though.
-- weekly-card: The target used to produce the weekly FreedomBox test release.
- This will copy the image to a card that can be popped directly into the
- microSD card slot in the DreamPlug. The DreamPlug will boot happily without
- needing a JTAG.
-- stamp-dreamplug-rootfs: The root file system itself. It doesn't get installed
- anywhere (that's done by the other two targets), but is a good way to test
- whether the image will actually build, without waiting for all that pesky
- hardware I/O.
-
-## mk_dreamplug_rootfs
-
-Starts building the system by creating all the destination directories and
-installing the base system.
-
-## /bin/projects
-
-Where projects that want to integrate into the FreedomBox should hook into.
-Keep in mind, we aren't in a chroot at this point. The only environment
-variables you'll probably need are:
-
-- user: The non-root user's name (uid = 1000).
-- homedir: The non-root user's home-directory.
-
-## /bin/finalize
-
-Getting the system ready for boot, doing the things that don't need to be done
-inside a chroot. You probably don't need to change this.
-
-## /source
-
-The root file system on the DreamPlug. Modify this, and you're modifying what
-ends up on the FreedomBox.
-
-## /source/install.sh
-
-This is executed from a chroot during the build process to do configuration that
-needs to be done on the device itself. You shouldn't need to modify this. If
-you're installing a project that needs to change how the system configures
-itself, you're probably doing something wrong.