Installing Debian onto USB flash media with everything encrypted.
Posted by DaveV on Sat 9 Jul 2005 at 22:14
This is a simple procedure for installing Debian GNU/Linux onto a USB key flash media. It includes several configuration changes but tries to stay as close to a default debian install as possible.
This is useful for administrators that need to carry sensitive information or people concerned about their privacy.
This was tested on Debian Sid and Knoppix 3.8 with the USB Keys listed below.
Tested Media:
- Transcend Jetflash 256MB ( only the base debootstrap install plus a few select packages ).
- Apacer Handy Steno HT203 1GB ( very fast, recommended ).
Other reviews of USB Flash media:
- ArsTechnica USB 2.0 Hi-Speed Flash Drive Roundup - http://arstechnica.com/reviews/hardware/flash.ars/1
- ArsTechnica Son of USB 2.0 Hi-Speed Flash Drive Roundup - http://arstechnica.com/reviews/hardware/flash2005.ars/1
Note on Devices: All device names and mappings are as they were detected and I used them on my system. You will need to substitute the correct device as it is detected on your system.
KNOPPIX NOTE: When you see these notes, there are special steps necessary for installing from Knoppix.
Installation Procedure
1. Shred the drive
shred -n 1 -z -v /dev/sdd
(One pass to shred, one pass to zero)
2. Create Partitions
We will create two partitions on the USB key, one for /boot and one for / (root). We do not create a swap partition because that would prematurely age the usb key. You may mount and use swap partitions from the local harddrives ala knoppix but that is up to you.
parted /dev/sdd "mklabel msdos mkpart primary 0 14 mkpart primary 15 -0"
3. Shred rootfs
shred -n 1 -v /dev/sdd2
(zero'd filesystems are bad for encrypted ones.)
4. Load modules if necessary
modprobe dm-crypt modprobe aesKNOPPIX NOTE: We need to install a few packages.
apt-get update apt-get install cryptsetup dmsetup libdevmapper1.01
5. Created mapped crypt device for root
cryptsetup -y create rootfs /dev/sdd2
6. Format filesystems:
Since we can't use journaling filesystems on flash media (premature aging again), we fall back to good old ext2.
mkfs.ext2 /dev/mapper/rootfs mkfs.ext2 /dev/sdd1 sync ; sync
7. Apply disk labels
We do this so that we can identify our drive when we boot on various systems. Using a strict device mapping often breaks if other usb or flash devices are detected before ours.You may use any label that you like, but you will have to remember to update the initrd (file: /sbin/init)
e2label /dev/sdd1 PRIVDEB_BOOT
8. Make temporary mount points and mount
mkdir /mnt/buildroot/ mount /dev/mapper/rootfs /mnt/buildroot mkdir /mnt/buildroot/boot mount /dev/sdd1 /mnt/buildroot/boot
9. Install base files.
debootstrap --arch i386 sid /mnt/buildroot
Note: Installed size is about 160MB at this stage.KNOPPIX NOTE: We need to copy a few extra devices over.
cp -ap /dev/ub[a-f]* /mnt/buildroot/dev/
10. Enter chroot jail to work on system.
chroot /mnt/buildroot/ /bin/su -
11. Build fstab and mount everything.
Create /etc/fstab file
#/etc/fstab: static file system information. # LABEL=PRIVDEB_BOOT /boot ext2 defaults,noatime 0 2 /dev/mapper/rootfs / ext2 defaults,errors=remount-ro,noatime 0 1 proc /proc proc defaults 0 0 tmpfs /etc/network/run tmpfs defaults,noatime 0 0 tmpfs /tmp tmpfs defaults,noatime 0 0 tmpfs /var/lock tmpfs defaults,noatime 0 0 tmpfs /var/log tmpfs defaults,noatime 0 0 tmpfs /var/run tmpfs defaults,noatime 0 0 tmpfs /var/tmp tmpfs defaults,noatime 0 0 tmpfs /home//Scratch tmpfs defaults,noatime 0 0 #Warning: By mounting /var/log on tmpfs, logs will only be available for the current session.
Mount it all
mount -a
12. Build sources.list
Create /etc/apt/sources.list
deb http://mirrors.kernel.org/debian/ sid main non-free contrib deb-src http://mirrors.kernel.org/debian/ sid main non-free contrib deb http://ftp.uk.debian.org/debian-non-US/ sid non-US/main non-US/non-free non-US/contrib deb-src http://ftp.uk.debian.org/debian-non-US/ sid non-US/main non-US/non-free non-US/contrib # If you are using debian stable (woody) include the security updates. # deb http://security.debian.org/ sid/updates main non-free contrib
Note: You can install and use apt-spy to test for the fastest downloading mirrors in your area.
13. System adjustments
blkid.tab: this file is cached as drives are scanned. Since the scan only takes a few seconds, you dont lose much by not caching or setting the default cache to /dev/null. This file generates an error on boot if the cache file has different device mappings than are currently detected. By removing the cache and forcing a fresh scan every time, the error is eliminated.
rm -f /etc/blkid.tab* ln -s /dev/null /etc/blkid.tab
mtab: This file is written a lot and may prematurely age parts of the flash media and the information can simply be accessed from /proc directly.
rm -f /etc/mtab ln -s /proc/mounts /etc/mtab
Set Hostname
vi /etc/hostname
Set /etc/hosts with localhost + hostname
vim /etc/hosts 127.0.0.1 localhost.localdoman localhost
14. Install additional required packages
apt-get update apt-get install cryptsetup dmsetup libdevmapper1.01 apt-get install discover1 libdiscover1 apt-get install module-init-tools equivs cramfsprogs apt-get clean
15. Install custom mkinitrd script and equiv package
Create mkinitrd.dmcrypt-usb file in /usr/local/sbin
#!/bin/bash
# Filename: mkinitrd.dmcrypt-usb
# Maintainer: Dave Vehrs
# Help
: << HELP_STEXT
Options:
-c Temporary directory to build image in.
-k Keep temporary directory used to build image.
-l Use to indenify boot partition.
-o Write to outfie
-d,-m,-r Included for fake support of default mkinitrd script
(anything passed to them is discarded).
See http://www.saout.de/tikiwiki/tiki-index.php?page=USBFlashMedia for more info.
HELP_STEXT
function display_shelp {
echo; echo "Usage $0 [OPTION]...<-o outfile> [version]"
sed --silent -e '/HELP_STEXT$/,/^HELP_STEXT/p' "$0" | sed -e '/HELP_STEXT/d'
}
# Set defaults
BOOT_LABEL="PRIVDEB_BOOT"
CRAMFSDIR=/tmp/cramfs
keep_temp=0
unset VERSION
# Parse command line.
# if version + other options not specified, exit.
if [ $# -eq 0 ] ; then
display_shelp
exit 1
fi
while [ $# -ge 1 ] ; do
case $1 in
-c ) CRAMFSDIR=$2 ; shift ; shift ;;
-d ) dir_conf=$2 ; shift ; shift ;;
-k ) keep_temp=1 ; shift ;;
-l ) BOOT_LABEL=$2 ; shift ; shift ;;
-m ) cmd_mkinitrd=$2 ; shift ; shift ;;
-o ) outfile_name=$2 ; shift ; shift ;;
-r ) initrd_root=$2 ; shift ; shift ;;
* ) VERSION=$1 ; shift ;;
esac
done
# Exit if version not specified
if [ -z "$VERSION" ] ; then
echo "Error: You need to specify a kernel version to build for."
exit 1
else
VERSION=${VERSION##*/}
fi
# Start build...
echo "Build directory tree."
install -d $CRAMFSDIR/{bin,dev/mapper,etc,proc,mnt,sbin}
echo "Copy binaries from /bin."
# Copy /bin binaries over and any require libraries.
files_bin="bash grep mount umount mkdir mknod sed sleep uname"
for file in $files_bin ; do
install /bin/$file $CRAMFSDIR/bin/$file
for lib in $( ldd /bin/$file | awk '{print $3}' | grep -v fffe000 ) ; do
install -d $CRAMFSDIR/${lib%/*}
install $lib $CRAMFSDIR/$lib
done
done
echo "Copy binaries from /usr/bin."
# Copy /usr/bin binaries over and any require libraries.
files_usrbin="find mawk"
for file in $files_usrbin ; do
install /usr/bin/$file $CRAMFSDIR/bin/$file
for lib in $( ldd /usr/bin/$file | awk '{print $3}' | grep -v fffe000 ); do
install -d $CRAMFSDIR/${lib%/*}
install $lib $CRAMFSDIR/$lib
done
done
echo "Copy binaries from /sbin."
# Copy /sbin binaries over and any require libraries.
files_sbin="cryptsetup e2label modprobe pivot_root"
for file in $files_sbin ; do
install /sbin/$file $CRAMFSDIR/sbin/$file
for lib in $( ldd /sbin/$file | awk '{print $3}' | grep -v fffe000 ) ; do
install -d $CRAMFSDIR/${lib%/*}
install $lib $CRAMFSDIR/$lib
done
done
# Add common links
ln -s bash /tmp/cramfs/bin/sh
ln -s mawk /tmp/cramfs/bin/awk
echo "Copy devices over."
# Copy devices over
cp -apL /dev/{console,hd,initrd,null,ram,scd,sd}* $CRAMFSDIR/dev/
echo "Copy modules over."
# Copy modules over
modules="aes-i586 dm-crypt sd_mod sr_mod ehci-hcd uhci-hcd ohci-hcd sl811-hcd usbhid usbkbd usb-storage vesafb fbcon ext2 unix"
for mod in $modules; do
for ko in $( modprobe --set-version $VERSION --show-depends $mod | cut -b8- ) ; do
install -d $CRAMFSDIR/${ko%/*}
install $ko $CRAMFSDIR/$ko
done
done
cp -apL /lib/modules/$VERSION/modules.* $CRAMFSDIR/lib/modules/$VERSION/
echo "Copy /etc files over."
# Copy required config files over
cp -apr /etc/modprobe.d $CRAMFSDIR/etc/
echo "Copy custom init over."
# Copy custom init file. (see below)
cat <$CRAMFSDIR/sbin/init
#!/bin/bash
# Filename: /sbin/init
# Dependencies: awk, bash, cryptsetup, e2label, find, grep, modprobe
# mount, pivot_root, sed, sleep and uname.
#
# This file generated by mkinitrd.dmcrypt-usb by Dave Vehrs.
set -e
# Set vars
unset pass part_boot part_rootfs major minor label
dm_name="device-mapper"
dm_dir="mapper"
dir="/dev/\$dm_dir"
control="\$dir/control"
count=0
# Mount /proc
/bin/mount -n -t proc none /proc
# Mount /dev/mapper on tmpfs
/bin/mount -o rw -n -t tmpfs none /dev/mapper
# Modules to load
CORE_MODULES="unix ide-core scsi_mod sd_mod sr_mod mbcache ext2"
DISPLAY_MODULES="vesafb fbcon"
CRYPT_MODULES="aes-i586 dm-mod dm-crypt"
USB_MODULES="ehci-hcd ohci-hcd uhci-hcd sl811-hcd usbcore usbhid usbkbd usb-storage"
# Load Modules
if [ -e /lib/modules/\$(/bin/uname -r) ] ; then
echo "initrd: loading modules."
for module in \$DISPLAY_MODULES \$CORE_MODULES \$CRYPT_MODULES \$USB_MODULES ; do
/bin/find /lib/modules/\$(/bin/uname -r) -name \$module.ko -exec /sbin/modprobe \$module \;
done
fi
# Test to be sure the procfs is mounted, if not exit.
if [ ! -e /proc/devices ] ; then
echo "initrd: procfs not found: please create \$control manually."
exit 1
fi
major=\$(/bin/sed -n 's/^ *\\([0-9]\+\\) \+misc$/\1/p' /proc/devices)
minor=\$(/bin/sed -n "s/^ *\\([0-9]\+\\) \+\$dm_name\\\$/\1/p" /proc/misc)
# Test to be sure dm_mod loaded
if [ -z "\$major" -o -z "\$minor" ] ; then
echo "initrd: \$dm_name kernel module not loaded: can't create \$control."
exit 1
fi
# Create new control device.
echo "initrd: creating \$control character device with major:\$major minor:\$minor."
/bin/mknod --mode=600 \$control c \$major \$minor
# Sleep to let kernel finish loading. 15 seconds is enough on most systems.
echo "initrd: sleeping for 15 seconds so kernel can finish detecting devices."
/bin/sleep 5
echo "initrd: sleeping for 10 more seconds..."
/bin/sleep 5
echo "initrd: sleeping for 5 more seconds..."
/bin/sleep 5
echo "initrd: awake...."
# Search for boot partition label. When usb media is detected by the operating
# system seems to migrate a little depending on what port you connect to on the
# mainboard and what if any other devices are connected and where. To
# compensate for that, we search for the label on our boot partition.
echo "initrd: searching for boot partition label."
for device in \$( /bin/grep sd[a-h]1 /proc/partitions | /bin/awk '{print \$4}' ) ; do
label=\$( /sbin/e2label /dev/\$device 2>/dev/null )
if [ ! -z "\$label" ] ; then
if [ "\$label" == "$BOOT_LABEL" ] ; then
part_boot="/dev/\$device"
break
fi
fi
done
# Exit if boot partition not found.
if [ -z "\$part_boot" ] ; then
echo "initrd: error -- boot partition label not found (\$part_boot)."
exit 1
fi
# Assign rootfs variable from boot (i.e. if boot is on /dev/sda1, this will
# set part_rootfs to /dev/sda2).
part_rootfs=\$( echo \$part_boot | /bin/sed -e 's/1/2/' )
# Unmount /proc
/bin/umount /proc
# Prompt for password
echo -en "\\nplease enter password for rootfs filesystem: "
read -s pass
echo -e
# Attempt mounting
echo "initrd: attempting to mount rootfs."
echo \$pass | /sbin/cryptsetup create rootfs \$part_rootfs
/bin/mount -r -n -t ext2 /dev/mapper/rootfs /mnt
# Loop for bad password attempts
while [ \$? -ne 0 ] ; do
# Remove old crypt mount.
/sbin/cryptsetup remove rootfs
# Test for max tries.
if [ \$count -ge 5 ] ; then
echo -e "\\ninitrd: too many bad guesses. aborting."
exit 1
else
count=\$(( \$count + 1 ))
fi
# Reprompt for password
echo -e "\\ninitrd: error -- rootfs mount failed."
echo -n "please re-enter password: "
read -s pass
echo
# Reattempt mounting
echo \$pass | /sbin/cryptsetup create rootfs \$part_rootfs
/bin/mount -r -n -t ext2 /dev/mapper/rootfs /mnt
done
unset pass
echo "initrd: rootfs successfully mounted."
# Now that the encrypted media is readable, shift the root to it and continue
# the boot cycle by running its init.
cd /mnt
/sbin/pivot_root . initrd
exec /usr/sbin/chroot . /sbin/init
EOF
chown root:root $CRAMFSDIR/sbin/init
chmod 755 $CRAMFSDIR/sbin/init
# make cramfs file
if [ -z "$outfile_name" ] ; then
mkcramfs $CRAMFSDIR ./initrd-$VERSION.img
else
mkcramfs $CRAMFSDIR $outfile_name
fi
# Cleanup
if [ $keep_temp -eq 0 ] ; then
rm -rf $CRAMFSDIR
fi
Set permissions, and links.
chown root.root /usr/local/sbin/mkinitrd.dmcrypt-usb chmod 750 /usr/local/sbin/mkinitrd.dmcrypt-usb ln -s /usr/local/sbin/mkinitrd.dmcrypt-usb /usr/sbin/mkinitrd
Next we need to install an equivs package to let the package system know that we installed this ourselves and not to install initrd-tools
cd /tmp equivs-control initrd-tools
Edit the generated template so that it looks like:
Section: misc
Priority: optional
Standards-Version:
Package: initrd-tools
Build equivs package
equivs-build initrd-tools
Install the package
dpkg -i initrd-tools_1.0_all.deb
For more information about equivs, see the APT howto at: APT-Howto: Equivs
16. Remove unwanted locales
Be very careful configuring and running localepurge. It is very easy to delete too many locales.
apt-get install localepurge localepurge apt-get clean
For more information about localepurge, see the APT howto at: APT-Howto: localepurge
17. Install kernel
WARNING: Kernels prior to 2.6.10 had a bug in the dm_crypt modules that potentially could reveal data. Only use 2.6.10 or better.
apt-get install kernel-image-2.6.11-1-686 apt-get clean
Note: Install size is approximately 184MB now. If you want to install a kernel built from source you can. After you install it, run /sbin/mkinitrd to build the /boot/initrd file. When you run /sbin/mkinitrd, it may print several FATAL errors regarding modules that it cannot find. If you built these modules into the kernel then you can ignore the error messages. If you omitted the modules, this is your warning to go build them as modules or into the kernel. Required modules: dm_crypt, aes, ide_core, scsi_mod, sd_mod, ehci-hcd, ohci-hcd, uhci-hcd, sl811-hcd, usb-storage, usb-hid, dm_mod, cramfs
18. Install optional packages
apt-get install vim irsii-text mutt fetchmail antiword screen apt-get install exuberant-ctags less procmail apt-get install python2.3 python2.3-pexpect python2.3-fuse apt-get install xserver-common xserver-xfree86 xbase-clients xfree86-common apt-get install ion3 -or- blackbox -or- fluxbox -or- icewm apt-get install xterm apt-get install memtest86+
Note: All this is approximately 300mb installed (with dependencies).
19. Install grub
apt-get install grub grub-install /dev/sdd mkdir /boot/grub grub root (hd1,0) setup (hd1) quit
Create /boot/grub/menu.lst file
# default num
default 0
# timeout sec
timeout 5
# pretty colours
color green/black black/green
title Debian GNU/Linux-2.6.11-1-686
root (hd0,0)
kernel /vmlinuz-2.6.11-1-686 root=/dev/ram0 init=/sbin/init vga=794
initrd /initrd.img-2.6.11-1-686
savedefault
boot
title Debian GNU/Linux-2.6.11-1-686 (Rescue/Single)
root (hd0,0)
kernel /vmlinuz-2.6.11-1-686 root=/dev/ram0 init=/sbin/init single
initrd /initrd.img-2.6.11-1-686
boot
title Memtest86+
root (hd0,0)
kernel /memtest86+.bin
boot
20. Add User accounts
Either:
Copy an existing /etc/group, /etc/passwd, and /etc/shadow file over from another system (this has to be done from outside the chroot directory).
Or:
Add users locally.
- set root password
passwd root- add local user
useradd passwd- repeat step 2 as necessary
21. Exit Jail
umount -a umount /proc exit
22. Unmount and remove crypt mapping
cd umount /mnt/buildroot/ cryptsetup remove rootfs
23. Reboot to test media
shutdown -r now
MOUNTING ON ANOTHER LINUX SYSTEM
1. Make sure required modules are loaded.
modprobe dm_crypt modprobe aes-i586 (or aes) modprobe usb-storage
2. Insert USB key into port
3. Create device mapping and mount
cryptsetup create rootfs /dev/sdd2 mount /dev/mapper/rootfs /mnt/buildroot
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
deb http://mirrors.kernel.org/debian/ sid main non-free contrib deb-src http://mirrors.kernel.org/debian/ sid main non-free contrib
# If you are using debian stable (woody) include the security updates. # deb http://security.debian.org/ sid/updates main non-free contrib
[ Parent | Reply to this comment ]
I'm a newbie and I have a question about how do you determine what the device name is for the USB flash media. I have Debian 3.1 loaded, and when I insert my USB flash media, the system recognizes it and mounts it. However, the properties show it to be in /media/"volume name". I have no idea name it is associated to under /dev/
TIA,
Jon
[ Parent | Reply to this comment ]
For example:
$ mount
/dev/sda2 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw)
/dev/sda1 on /boot type ext2 (rw)
[ Parent | Reply to this comment ]
That is exactly what I needed ;-)
[ Parent | Reply to this comment ]
I have run into a problem with this at Step 5. When I enter "cryptsetup -y create rootfs /dev/sdb2", I get prompted for a passphrase. I enter one and get prompted to retype it, which I do. At this point, I get the error: "command failed: invalid argument"
Do you happen to know what might cause this?
[ Parent | Reply to this comment ]
Also, what versions of dmsetup and cryptsetup?
Also what platform are you running on AMD64 or i386? I generally use AMD64 but I can open a 32bit jail for some testing....
[ Parent | Reply to this comment ]
I have the following:
libdevmapper=2:1.01.00-4 (that's how synaptic shows it)
dmsetup=2:1.01.00-4
cryptsetup=20050111-3
I am running on i386
Thanks
[ Parent | Reply to this comment ]
Second, I think your dmsetup is a couple versions behind current and a quick apt-get update/upgrade should fix that.
(I have version 1.01.03-1 for dmsetup and libdevmapper1.01)
[ Parent | Reply to this comment ]
The only versions I have that still mount are all a couple of months out of updates so I'll try and work backwards from them to see what changed.
[ Parent | Reply to this comment ]
OK, rebuilding libdevmapper1.01 and dmsetup from the source package fixed my problems.
Easiest/fastest way to rebuild it is with apt-src.
First, install apt-src if you need to and remove prebuilt versions of libdevmapper1.01, dmsetup:
apt-get install apt-src apt-get remove libdevmapper1.01 dmsetup
Note: cryptsetup will get removed as well because it depends on libdevmapper1.01 and dmsetup.
Second, create a directory to store source files in and use apt-src to download/install the necessary files:
cd $HOME mkdir SRC apt-src install libdevmapper1.01
Third, build the packages:
apt-src build libdevmapper1.01 dmsetup
Forth, install the packages:
dpkg -i libdevmapper1.01*.deb libdevmapper-dev*.deb dmsetup*.deb
Fifth, put cryptsetup back:
apt-get install cryptsetup
Note: Until the binary distribution of libdevmapper1.01 and dmsetup is fixed, you will also need to run apt-src update/upgrade when you do regular system updates with apt-get update/upgrade.
[ Parent | Reply to this comment ]
Small correction.
Change into the SRC directory after you create it, as apt-src will create quite a few directories and files.
cd $HOME mkdir SRC cd SRC apt-src install libdevmapper1.01
....
[ Parent | Reply to this comment ]
Sorry about the delay in getting back to you (I hosed my kernel trying to get sound support working and had to rebuild). Anyway, everything appears to be fine now until I get to step 9. I execute "debootstrap --arch i386 sid /mnt/buildroot" and the system goes out and downloads a lot of files but it errors out with: "Couldn't download libsigc++-1.2-5c102" and then I get kicked back to a prompt.
Jon
[ Parent | Reply to this comment ]
Yeah, debootstrap can be a little finky sometimes. However, the good news is you can just run it again as many times as necessary until you get the successful install message.
If its a download issue then generally a second run is all thats necessary.
Or if its a problem with the mirror's update status, try different mirror or wait a day then try again.
[ Parent | Reply to this comment ]
I tried multiple downloads and multiple mirrors, but debootstrap keep failing at: "Couldn't download libsigc++-1.2-5c102" Do you happen to know of a mirror that you know works?
Thanks,
Jon
[ Parent | Reply to this comment ]
I had the same problem when trying to install to a
loop device
try
--exclude=libsigc++-1.2-5c102
to exclude the file from the bootstrap. It can later be added :)
[ Parent | Reply to this comment ]
I: Extracting libstdc++5... ar: /mnt/buildroot//var/cache/apt/archives/dpkg_1.10.28_i386.deb /var/cache/apt/archives/dpkg_1.13.11_i386.deb: No such file or directory zcat: stdin: unexpected end of file I: Installing core packages... ln: `/mnt/buildroot/usr/bin/awk': File exists umount: /mnt/buildroot/dev/pts: not mounted umount: /mnt/buildroot/dev/shm: not mounted umount: /mnt/buildroot/proc/bus/usb: not mountedthen on chroot I just can't su:
Portatil:/mnt/buildroot# chroot /mnt/buildroot/ /bin/su - Sorry. Portatil:/mnt/buildroot# chroot /mnt/buildroot/ I have no name!@Portatil:/# su Sorry.Then on step 11
I have no name!@Portatil:/# pico /etc/fstab bash: pico: command not found I have no name!@Portatil:/# nano /etc/fstab bash: nano: command not found I have no name!@Portatil:/# vi /etc/fstab bash: vi: command not foundok so I used my own environment to create the /mnt/buildroot/etc/fstab entrie but when on chroot I used the mount -a:
I have no name!@Portatil:/# mount -a warning: can't open /etc/mtab: No such file or directory mount: special device LABEL=PRIVDEB_BOOT does not exist mount: mount point /etc/network/run does not exist mount: mount point /home//Scratch does not existOn step 12 I used again my own environment and I copied my own sources.list (for debian sarge). And on step 13 on the /etc/hosts and /etc/hostname I also have also used my own environment... Now the big problem is step 14:
I have no name!@Portatil:/# apt-get update bash: apt-get: command not found I have no name!@Portatil:/# aptitudeplease I would like some help... should I erase everything and use debootstrap sid with --exclude=libsigc++-1.2-5c102 ? thanks in advance Tiago Geada
[ Parent | Reply to this comment ]
Almost all of the errors after su failed are related to the fact that your new chroot environment is not setup properly. For example, the applications can't be found cause the PATH variable is not set.
For the mount error, if you created the link to /etc/mtab to /proc/mounts, then the error is that /proc probably isn't mounted yet. Try this:
mount -t proc none /proc mount -a
However having said all that, I believe that the root problem is that debootstrap error. While its probably fixable, the quickest solution is to just erase everything and start over with either sarge or sid.
[ Parent | Reply to this comment ]
as I have choosen sarge instead of sid I would have to install kernel-image-2.6.8-2-686 instead (like not caring about the bug that could reveal data). Altho I get the following output:
---
Portatil:/tmp# apt-get install kernel-image-2.6.8-2-686
Reading Package Lists... Done
Building Dependency Tree... Done
kernel-image-2.6.8-2-686 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
1 not fully installed or removed.
Need to get 0B of archives.
After unpacking 0B of additional disk space will be used.
Setting up kernel-image-2.6.8-2-686 (2.6.8-16) ...
Build directory tree.
Copy binaries from /bin.
Copy binaries from /usr/bin.
Copy binaries from /sbin.
Copy devices over.
Copy modules over.
FATAL: Module sl811_hcd not found.
Copy /etc files over.
Copy custom init over.
/usr/sbin/mkinitrd: line 120: /tmp/cramfs/sbin/init: No such file or directory
mount: proc already mounted
Failed to create initrd image.
dpkg: error processing kernel-image-2.6.8-2-686 (--configure):
subprocess post-installation script returned error exit status 9
Errors were encountered while processing:
kernel-image-2.6.8-2-686
E: Sub-process /usr/bin/dpkg returned an error code (1)
---
so Im stuck here... should I go back all the process again and choose sid instead??
[ Parent | Reply to this comment ]
It should still work. Let me look into it.
Off of the top of my head the problem is in step 15, maybe you can retry from there. (no need to erase it all)
Ignore the "FATAL: Module sl811_hcd not found.", thats only a problem if thats your USB controller chipset which obviously isn't a problem for you because you're already accessing usb devices.
[ Parent | Reply to this comment ]
I don't understand anything about the initrd...
-----
Get:1 http://mirrors.kernel.org sarge/main
kernel-image-2.6.8-2-686 2.6.8-16 [15.5MB]
Fetched 15.5MB in 1m19s (196kB/s)
Selecting previously deselected package
kernel-image-2.6.8-2-686.
(Reading database ... 10083 files and directories currently installed.)
Unpacking kernel-image-2.6.8-2-686 (from .../kernel-image-2.6.8-2-686_2.6.8-16_i386.deb) ...
You are attempting to install an initrd kernel image (version 2.6.8-2-686)
This will not work unless you have configured your boot loader to use initrd. (An initrd image is a kernel image that expects to use an INITial Ram Disk to mount a minimal root file system into RAM and use that for booting).
As a reminder, in order to configure LILO, you need
to add an 'initrd=/initrd.img' to the image=/vmlinuz
stanza of your /etc/lilo.conf
I repeat, You need to configure your boot loader -- please read your
bootloader documentation for details on how to add initrd images.
If you have already done so, and you wish to get rid of this message,
please put
"do_initrd = Yes"
in /etc/kernel-img.conf. Note that this is optional, but if you do not,
you will continue to see this message whenever you install a kernel
image using initrd.
Do you want to stop now? [Y/n]n
Setting up kernel-image-2.6.8-2-686 (2.6.8-16) ...
Build directory tree.
Copy binaries from /bin.
Copy binaries from /usr/bin.
Copy binaries from /sbin.
Copy devices over.
cp: cannot stat `/dev/hd*': No such file or directory
cp: cannot stat `/dev/initrd*': No such file or directory
cp: cannot stat `/dev/scd*': No such file or directory
cp: cannot stat `/dev/sd*': No such file or directory
Copy modules over.
FATAL: Module sl811_hcd not found.
Copy /etc files over.
Copy custom init over.
/usr/sbin/mkinitrd: line 120: /tmp/cramfs/sbin/init: No such file or directory
mount: mount point /dev/mapper does not exist
Failed to create initrd image.
dpkg: error processing kernel-image-2.6.8-2-686 (--configure):
subprocess post-installation script returned error exit status 9
Errors were encountered while processing:
kernel-image-2.6.8-2-686
localepurge: Disk space freed in /usr/share/locale: 25116K
E: Sub-process /usr/bin/dpkg returned an error code (1)
---------
[ Parent | Reply to this comment ]
Ok, I dunno why sarge isn't working, but I've done most of my testing with sid and it works like clockwork. Try it.
[ Parent | Reply to this comment ]
Looks like I may have discovered the bug that was causing this to fail for you. Sorry I didn't catch it sooner.
See post http://www.debian-administration.org/articles/179#comment_28
[ Parent | Reply to this comment ]
Just out of curiosity, what brands and sizes of usb media have people been using? Any recommendations or warnings?
[ Parent | Reply to this comment ]
I have a CRUZER mini 1.0GB
It works pretty good, never had problems with it.
I also have a iomega pendrive - 256MB. As I offered the iomega to my brother I can't say much about it but I know this far: He lost quite some files on it when suddenly windows would not recognise it as a formated drive.. lol
I used cfdisk util to fix it. I saw him write some files to it and next day windows would not recognise it again, could't even format it... I used cfdisk again... and never heard about it again..
I have the cruzer for about 1 year now and the iomega since christmas...
Don't use iomega usb sticks :P
[ Parent | Reply to this comment ]
mount: special device LABEL=PRIVDEB_BOOT does not exist
mount: mount point /home//Scratch does not exist
when I 'mount -a'. What have I missed? I'm giving this a go with Ubuntu Breezy BTW (I can actually go on until the grub install so I'm pretty close in general).
[ Parent | Reply to this comment ]
First for the boot label, did you skip step #7?
7. Apply disk labels
We do this so that we can identify our drive when we boot on various systems. Using a strict device mapping often breaks if other usb or flash devices are detected before ours.You may use any label that you like, but you will have to remember to update the initrd (file: /sbin/init)
e2label /dev/sdd1 PRIVDEB_BOOT
And for /home//Scratch, thats a error in the howto that needs to be corrected. In the fstab file, the last line should read:
tmpfs /home/<username>/Scratch tmpfs defaults,noatime 0 0And all you need to do replace <username> with your username and create the Scratch mount point ( mkdir /home/<username>/Scratch ).
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
During the install its sometimes necessary to force /proc to mount first, try:
mount -t proc none /proc mount -a
And if that doesn't work, you can also force the mounting of the /boot partition during the install chroot by just mounting its device directly. The debootstrap step should have already created the device files you need so you shouldn't have to copy them.
[ Parent | Reply to this comment ]
mount: special device LABEL=PRIVDEB_BOOT does not existis still happening. I'm confused about why, since the /etc/fstab is exactly as written in this article. I've made it on to step 14, but when I attempt apt-get,
apt-get: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directorydebootstrap finished successfully, but I am not able to find libgcc in my chroot environment. How can I add it, if apt-get isn't working? Thanks.
[ Parent | Reply to this comment ]
wget http://mirrors.kernel.org/debian/pool/main/g/gcc-4.0/libgcc1_4.0. 1-7_i386.deb -o libgcc1_4.0.1-7_i386.deb dpkg --install libgcc1_4.0.1-7_i386.debThen I was able to do apt-get update and continue with step 14. So I am now only wondering about the mount -a issue.
[ Parent | Reply to this comment ]
cp -ap /dev/sdc* /mnt/buildroot/dev/
Then, when I went back inside the jail, mount -a did not complain.
[ Parent | Reply to this comment ]
OK, it looks like a small bug in the HTML parser/generator for this website caused a couple errors in the text that I did not catch before tonight.
The error is that to input < and > symbols you need to use the < and > representations. However if you preview the text, it changes them to the <> symbols in the preview and in the text you input. If you dont catch it every time you preview the document then the error is there.
Now, the errors I've found so far are all in the mkinitrd.dmcrypt-usb script.
The first is in the Help text here document, it currently reads:
# Help
: << HELP_STEXT
Options:
-c Temporary directory to build image in.
-k Keep temporary directory used to build image.
-l Use to indenify boot partition.
-o Write to outfie
-d,-m,-r Included for fake support of default mkinitrd script
(anything passed to them is discarded).
See http://www.saout.de/tikiwiki/tiki-index.php?page=USBFlashMedia for more info.
HELP_STEXT
It should read:
# Help
: << HELP_STEXT
Options:
-c Temporary directory to build image in.
-k Keep temporary directory used to build image.
-l <label> Use to indenify boot partition.
-o <outfile> Write to outfie
-d,-m,-r Included for fake support of default mkinitrd script
(anything passed to them is discarded).
See http://www.saout.de/tikiwiki/tiki-index.php?page=USBFlashMedia for more info.
HELP_STEXT
The next error is on line 148, and currently reads:
echo "Copy custom init over." # Copy custom init file. (see below) cat <$CRAMFSDIR/sbin/init
It should read:
echo "Copy custom init over." # Copy custom init file. (see below) cat <<EOF >$CRAMFSDIR/sbin/init
Thats all I've found so far but I will post more fixes as I find them.
[ Parent | Reply to this comment ]
And there is changed them when i didn't want it too.
What I meant to say is the bug is caused by useing < and > around words in the text. The browser assumes its html and they get hidden from view.
So after every preview you have to change < and > back to & lt; and & gt; (spaces added so they dont get processed) in the text input window.
[ Parent | Reply to this comment ]
It seems ok since i manage to get to grub.
However, while booting it reaches when RAMDISK is mounted, and cramfs is read and mounted as root. At that point, it says it cannot find /sbin/init and dies there.
Any ideas?
I am using current sid with 2.6.12-1-686 kernel. If more information is needed, i can post it here or by mail: mooch (a) debian ! org
[ Parent | Reply to this comment ]
Did you make the corrections to mkinitrd.dmcrypt-usb as detailed in: http://www.debian-administration.org/articles/179#comment_28 ?
[ Parent | Reply to this comment ]
404
The page you were looking for could not be found.
[ Parent | Reply to this comment ]
Sorry, too fast following the link instead of reading. ;)
Yes, I did, and it does not seem to help in any way.
[ Parent | Reply to this comment ]
It seems to be a problem with using ldd to find the libraries to copy over to the initrd image. The output of the new version of ldd is different and ld-linux.so.2 is not copied to the image.
Modify the the mkinitrd.dmcrypt-usb:
...
# Copy /bin binaries over and any require libraries.
files_bin="bash grep mount umount mkdir mknod sed sleep uname"
for file in $files_bin ; do
install /bin/$file $CRAMFSDIR/bin/$file
for lib in $( ldd /bin/$file | awk '{print $3}' | grep -v fffe000 ) ; do
install -d $CRAMFSDIR/${lib%/*}
install $lib $CRAMFSDIR/$lib
done
done
# copy ld-linux by hand because it is not matched in the
# previous for loop with newer version of ldd
install /lib/ld-linux.so.2 $CRAMFSDIR/lib
...
I can be reached at dam-at-cosinux-dot-org
[ Parent | Reply to this comment ]
Now it is working. Thanks!
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
unsused kernel memory and then fails to find /sbin/init. :-(
[ Parent | Reply to this comment ]
initrd: attempting to mount rootfs.
Command failed: Block device required
Kernel panic: Attempted to kill init!
Mounting it on my local machine gives the following nugget from dmesg when
I try and mount /dev/mapper/rootfs:
cramfs: wrong magic
Has anyone seen/solved this?
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
If its failing to find /sbin/init, did you apply the patches to mkinitrd.dmcrypt-usb listed in Comment #28 and in Comment #40?
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
with the grub title Debian GNU/Linux-2.6.12-1-386 I receive black screen and nothing happen.
with the grub title Debian GNU/Linux-2.6.12-1-386 (Rescue/Single) I receive the error :
kernel panic not syncing: no init found. Try passing init= option to kernel
Any help please ?
Thank you.
[ Parent | Reply to this comment ]
Can someone help me what is wrong ?
Thank you.
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
It seems that I have the same problem. I applied the patches, but it still doesn't find /sbin/init. How did you solve the problem?
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
Enter passphrase:
Verify passphrase:
Command failed: Invalid argument
even after rebuild# apt-src build libdevmapper1.01 dmsetup
debian-laptop:~/src# uname -a
Linux debian-laptop 2.4.27-2-386 #1 Mon May 16 16:47:51 JST 2005 i686 GNU/Linux
do I need 2.6 kernel?
thanks Mike.
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
E: Couldn't find package kernel-image-2.6.11-1-686
Can some one provide me with a working entry for my sources.list? Thanks.
[ Parent | Reply to this comment ]
OK, if you can't find that kernel image, you can use apt-cache to determine what is available in your sources. For example:
user@host { ~ }$ apt-cache search kernel-image
comedi-source - Comedi kernel module source
ieee80211-source - Source for the 802.11 (wireless) network stack for Linux
kernel-image-netbootable - net-bootable kernel for use with diskless systems
kernel-package - A utility for building Linux kernel related Debian packages.
kernel-source-2.4.27 - Linux kernel source for version 2.4.27 with Debian patches
kernel-tree-2.4.27 - Linux kernel source tree for building Debian kernel images
linux-image-2.6.15-1-amd64-generic - Linux kernel 2.6.15 image on all x86-64 machines
linux-image-2.6.15-1-amd64-k8 - Linux kernel 2.6.15 image on AMD64 K8 machines
linux-image-2.6.15-1-amd64-k8-smp - Linux kernel 2.6.15 image on AMD64 K8 SMP machines
linux-image-2.6.15-1-em64t-p4 - Linux kernel 2.6.15 image on Intel em64t P4 machines
linux-image-2.6.15-1-em64t-p4-smp - Linux kernel 2.6.15 image on Intel em64t P4/Xeon SMP machines
rt2400-source - RT2400 wireless network drivers source
rt2500-source - RT2500 wireless network drivers source
acx100-source - ACX100/ACX111 wireless network drivers source
ipw2100-source - source for the ipw2100 driver
kernel-image-2.6.8-10-amd64-k8 - Linux kernel image for version 2.6.8 on AMD64 systems
kernel-image-2.6.8-11-amd64-k8 - Linux kernel image for version 2.6.8 on AMD64 systems
user@host { ~ }$
And we can see that in my sources, the current kernel-image version is 2.6.15-1, and that there are 4 versions available.
However, for most systems, you will want -686 or -386.
[ Parent | Reply to this comment ]
I've run into trouble with this procedure. It seems to revolve around grub, as I cannot boot from my USB-key. I just get a message telling me to insert a system disk (and yes, the BIOS is set to boot from USB-ZIP, and only from USB-ZIP).
When I hit step 19, I did (from inside the chroot jail):
apt-get install grub
grub-install /dev/sda
mkdir /boot/grub
grub
The recommended "root (hd1,0)" and "setup (hd1)" didn't work for me (sorry, I didn't write out the error ... "drive not found" I think. I quit, and finished the rest of the setup.
Later, I remounted the rootfs to /mnt/buildroot and then remounted /dev/sda1 to /mnt/buildroot/boot. I ran grub and, by this time, knew that I could hit TAB to complete the hd info (I normally use LILO ... does it show?). Anyway, I did:
root (hd0,0)
setup (hd0)
quit
That seemed to go OK, but, not knowing grub well, I didn't know how to check except by trying to boot from the key. No. Same problem.
I could use some advice. Thanks. BTW, here is my menu.lst:
# default num
default 0
# timeout sec
timeout 5
# pretty colours
color green/black black/green
title Debian GNU/Linux-2.6.15-1-686
root (hd0,0)
kernel /vmlinuz-2.6.15-1-686 root=/dev/ram0 init=/sbin/init vga=794
initrd /initrd.img-2.6.15-1-686
savedefault
boot
title Debian GNU/Linux-2.6.15-1-686 (Rescue/Single)
root (hd0,0)
kernel /vmlinuz-2.6.15-1-686 root=/dev/ram0 init=/sbin/init single
initrd /initrd.img-2.6.15-1-686
boot
title Memtest86+
root (hd0,0)
kernel /memtest86+.bin
boot
[ Parent | Reply to this comment ]
Additionally, not all USB keys are bootable. It's possible you have a model that can't be used for this.
For more information on both, you need the check the manufacturer specs for your usb key.
[ Parent | Reply to this comment ]
Here's my problem ... Windows refuses to recognize that partition. In fact, it tells me that the whole key is unformatted and offers to format it (which I presume would trash the Debian install ... stupid windows).
So I've tried a number of ways of formating the drive under linux. For example I've done "mkfs.vfat" and "mkfs.vfat -F 32". I've used fdisk to ensure that the partition ID is set to W95 FAT32 (ie 0x0b). Still no luck. Setting the ID to FAT16 (0x06) is no better.
Do any of you know if Windows XP is even capable of passing over two non-MS partitions to read a third? If so, how can I set up my drive to take advantage of this? Thanks!
[ Parent | Reply to this comment ]
Perhaps the only difference is they generally put the fat32 partition first.
You might try that, then modify grub and the loader to the new partitions.
[ Parent | Reply to this comment ]
FATAL: Module unknown not found
mount: Mounting /dev/ram0 on /root failed: No such device
Mounting /root/dev on /dev/.static/dev failed: No such file or directory
Mounting /sys on /root/sys failed
Mounting /proc on root/proc failed
Target filesystem doesn't have /sbin/init
/bin/sh: can't access tty; job control turned off
I'm then left in what looks like a single user prompt with no clue what went wrong. A quick look in /dev told me that /dev/ram0 and the tty devices were present although I couldn't say if they were working or not. lsmod wasn't available.
I installed kernel-image-2.6.15-1-686.
Any help would be very much appreciated!
[ Parent | Reply to this comment ]
Also with 2.6.15+ you need to make sure udev version 0.071 or greater is installed.
Next using /root/ as the name of a directory other than roots home directory is dangerous and bound to cause problems
[ Parent | Reply to this comment ]
initrd: attempting to mount rootfs.I've narrowed it down to this line
device-mapper: ioctl interface mismatch: kernel(4.4.0), user(1.0.0), cmd(0)
Command failed: Invalid argument
Kernel panic: Attempted to kill init!
echo \$pass | /sbin/cryptsetup create rootfs \$part_rootfs. I've got no idea what the device-mapper error means and the Google results are no help. I've got udev 0.084-1 and libdevmapper1.02 installed. I don't know how to find out which command failed and what the invalid argument was so I'm a bit stuck.
[ Parent | Reply to this comment ]
-I have an EPIA system too, and it reboots too :( There is supposedly a bios upgrade that fixes some DMA transfer lock up bugs, its a long shot but hopefully that will fix the EPIA issue?
[ Parent | Reply to this comment ]
as for the EPIA deal, it turns out I had selected the wrong processor type (Nehemia), it should actally be the CyrixIII (or 586 class) chip - works great, no moving parts 25 watt total power system! :)
But it isn't encrypted... :(
[ Parent | Reply to this comment ]
1) Read all the comments first to make sure the mkinitrd script you create is correct.
2) Make sure you run mount -t proc none /proc in the chroot before you run mount -a.
3) Make sure that all necessary devices are in place before mkinitrd is run (ie. before you install the kernel in the chroot environment). To fix this, I suspect the most efficient way is to go to /dev in the chroot and run ./MAKEDEV. I found I had difficulties with the serial devices /dev/sd* and the tty terminals /dev/tty[1-6]. I replaced them by leaving the chroot and doing cp -ap /dev/ /mnt/buildroot/dev.
4) Remember that umount -a will not work properly when setting up the system for the first time. To properly unmount and avoid "device is busy" errors, you must proceed in the following order while in the chroot:
cd /OK, 4) isn't essential if you sync before you reset but I like it :7). If I get time, I'd like to post a revised version to my LUG's wiki. I've learnt a lot - thanks Dave!
umount /boot/
umount /etc/network/run
umount /tmp
umount /var/lock
umount /var/log
umount /var/run
umount /var/tmp
umount /home/luke/Scratch
umount /proc
exit
cd /
umount /mnt/buildroot/boot
umount /mnt/buildroot
cryptsetup remove rootfs
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
I had exact the problem
initrd: attempting to mount rootfs.
device-mapper: ioctl interface mismatch: kernel(4.4.0), user(1.0.0)
A more verbose output of cryptsetup showed that the problem seems to be in cryptsetup and libdevmapper. So I gave it a try and copied the cryptsetup binary and the libdevmapper library of the host (with which I had set up the encrypted rootfs) into the bootstrapped rootfs. I executed the mkinitrd.dmcrypt script, rebooted and now it works.
Hope it helps you guys too...
[ Parent | Reply to this comment ]
mkinitrd -o /boot/initrd.img-2.6.15.2 2.6.15.2
FATAL: Module sd_mod not found. possible scsi-disk in cdrom
FATAL: Module sr_mod not found. possible ide-scsi in cdrom
FATAL: Module ehci_hcd not found.
FATAL: Module usbhid not found.
FATAL: Module usbkbd not found.
FATAL: Module usb_storage not found.
FATAL: Module vesafb not found.
FATAL: Module ext2 not found.
FATAL: Module unix not found.
so continued on ...
i noticed in grub was different so i changed it to the following:
title Debian GNU/Linux-2.6.15.2
root (hd0,0)
kernel /boot/vmlinuz-2.6.15.2 root=/dev/ram0 init=/sbin/init vga=794
initrd /boot/initrd.img-2.6.15.2
savedefault
boot
should i use /boot infront of vmlinuz and initrd? and should i use hdd instead of sda?
the problem was that i finished the guide rebooted from the usb, it said booting grub... then came into the grub console??
Thanks Heaps
William
[ Parent | Reply to this comment ]
Just a quick one, how can i make it so it puts the password in automatically at startup? This is so the machine can boot automatically and not need a password and the filesystem is still encrypted so no one can copy it.
Many Thanks
William
[ Parent | Reply to this comment ]
grub>
so i type in "configfile /grub/menu.1st" and the menu appears and continues to boot :) so now i have a bit of a problem grub isnt finding the menu.1st file? and it doesnt automatically boot - it needs a password?
many thanks, william
[ Parent | Reply to this comment ]
I'm using etch for both systems, the host with which I create the crypted rootfs
and the system on the usb boot device:
# dpkg -l cryptsetup libdevmapper1.02
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-ins talled
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-=============================== =============
ii cryptsetup 1.0.4-8 configures encrypted block devices
ii libdevmapper1. 1.02.08-1 The Linux Kernel Device Mapper userspace lib
The only difference is that I'm using a self compiled kernel on the host and
the 2.6.18 one provided by etch.
Peter
[ Parent | Reply to this comment ]
----
BRSIbm:~# sudo apt-get install linux-image-2.6.15-1-686-smp
Reading package lists... Done
Building dependency tree... Done
Suggested packages:
linux-doc-2.6.15 linux-source-2.6.15 lilo fdutils
Recommended packages:
libc6-i686
The following NEW packages will be installed:
linux-image-2.6.15-1-686-smp
0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
Need to get 0B/15.7MB of archives.
After unpacking 45.1MB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously deselected package linux-image-2.6.15-1-686-smp.
(Reading database ... 16541 files and directories currently installed.)
Unpacking linux-image-2.6.15-1-686-smp (from .../linux-image-2.6.15-1-686-smp_2.6.15-8_i386.deb) ...
Done.
Setting up linux-image-2.6.15-1-686-smp (2.6.15-8) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
----
It's using mkinitramfs-kpgk instead of Dave's script, and so it's not actually putting any of the necessary modules into the image.
When installing 2.6.8, everything works well:
----
...
Unpacking replacement kernel-image-2.6.8-2-686-smp ...
Setting up kernel-image-2.6.8-2-686-smp (2.6.8-16sarge1) ...
Build directory tree.
Copy binaries from /bin.
Copy binaries from /usr/bin.
Copy binaries from /sbin.
Copy devices over.
cp: cannot stat `/dev/initrd*': No such file or directory
cp: cannot stat `/dev/scd*': No such file or directory
Copy modules over.
FATAL: Module sl811_hcd not found.
Copy /etc files over.
Copy custom init over.
Directory data: 10292 bytes
Everything: 2600 kilobytes
Super block: 76 bytes
CRC: 641b65c2
Not touching initrd symlinks since we are being reinstalled (2.6.8-16sarge1)
Not updating image symbolic links since we are being updated (2.6.8-16sarge1)
----
None of these errors are particularly important, and everything works ok with 2.6.8, but it'd be nice to get 2.6.15 working.
I've been looking into it, but it seems to me that the 2.6.15 kernel package uses a different default ramfs packager, and it's skipping over the custom script.
Thoughts? Cheers,
Brendan
[ Parent | Reply to this comment ]
From some feedback that I've gotten from other sources, some people would like more detailed discussions of why some of the steps are what they are so that they can better adapt the howto to their individual circumstances. So the next howto should be significantly longer and more involved (currently exploring udev and yaird).
I'd also like to do a version for Debian Etch and one for Sid. Maybe the Etch version could be "stable" and usable for a little longer. lol.
Dave.
[ Parent | Reply to this comment ]
I got pretty far in you great instructions but I didn't want encryption
and only wanted one partition on the USB key. Well, I guess I should have
stuck with exactly what you did because while a lot of it worked I had problems
with grub and mkinitrd. I also found that I couldn't do:
mount /dev/sda1 /mnt/buildroot
debootstrap --arch i386 sid /mnt/buildroot
But instead had to do:
debootstrap --arch i386 sid ~/in/buildroot http://debian.osuosl.org/debian
mkdir -p /mnt/buildroot
mount /dev/sda1 /mnt/buildroot
cp -prd ~/in/buildroot/* /mnt/buildroot
When I did the former it would hang (like over 4 hours) and the LED on the USB would flash continuously.
Anyway, I'd encourage you to brush up what you have here and maybe mark
the steps required for encription for those that don't want it. Maybe add info on using lilo since I did get that working.
Thanks for all the great info!
Rick Bronson
[ Parent | Reply to this comment ]
Dave
[ Parent | Reply to this comment ]
Personally I like the standard cryptsetup better to use on the command line, but as I understand there are some advantages to TrueCrypt. It uses the user's passphrase to encrypt the key, which is stored in the first 1024k or so with the file system header. The advantage is that it is possible to change the passphrase on the disk, which is not possible with dm-crypt, afaik.
On the other hand, it has to be compiled for the kernel, so it might be a pain to set up. It still uses dev-mapper, so the majority of the steps would be the same, and it could even be an optional step.
Brendan
[ Parent | Reply to this comment ]
While there is a process for changing a password with cryptsetup it is involved and high risk. To address this, I will most likely use the Linux Unified Key Setup enhanced version of cryptsetup (http://luks.endorphin.org/), which is currently packaged with Debian Sid. It not only allows you to change passwords with relative ease, it has support for multiple passwords so multi-user support will be easier.
At one time there was discussion of TrueCrypt supporting LUKS partitions but I dont know for sure if they ever implemented it. I will add TrueCrypt to my notes of things to look into.
Thanks for the input.
Dave
[ Parent | Reply to this comment ]
Here is what I have for lilo instructions, in case you wanted to use them.
If you'd like a beta tester when you brush up your notes, I'd be happy to help out. Just sent them to rick (at) efn ! org
Rick
# To use LILO, do the following (NOTE: kernel name and
# "/dev/sd??" might have to change
apt-get install lilo
cat > /etc/lilo.conf << EOF
bitmap=/boot/sid.bmp
bmp-colors=1,,0,2,,0
bmp-table=120p,173p,1,15,17
bmp-timer=254p,432p,1,0,0
install=bmp
default=sid
# install=menu
map=/boot/map
vga=normal
delay=20
image=/boot/vmlinuz-2.6.15-1-486
label=sid
root=/dev/sda1
read-only
initrd=/boot/initrd.img-2.6.15-1-486
EOF
lilo -M /dev/sda # install MBR
lilo -b /dev/sda # install lilo
[ Parent | Reply to this comment ]
I'll definitely find a home for your lilo instructions and keep you in mind when its testing time.
Dave
[ Parent | Reply to this comment ]
This one is for a very basic install, no encryption or anything fancy.
You can see it at http://www.feraga.com/click/25/0.
Thanks!
[ Parent | Reply to this comment ]
Yes I do want to! I tried it and have some comments:
If I do this:
mount -t ext2 /dev/sda1 /mnt/buildroot
debootstrap --arch i386 sid /mnt/buildroot
It totally locks up and I have to hit the reset button on the computer. Really. lsof on /mnt/buildroot shows a process that cannot be killed. I can only think that it's a bug in my 2.6.15-rc7-git4 USB driver. Anyway, it's bad enought that I'd like to propose a work around:
mkdir -p /mnt/buildroot /tmp/getroot
debootstrap --arch i386 sid /tmp/getroot http://debian.osuosl.org/debian
mount /dev/sda1 /mnt/buildroot
cp -prd /tmp/getroot/* /mnt/buildroot
chroot /mnt/buildroot/ /bin/su -
This works fine.
The first chunk of lilo.conf is missing. It should read:
-----------------------------------
boot=/dev/sda
root=/dev/sda1
compact
bitmap=/boot/sid.bmp
bmp-colors=1,,0,2,,0
bmp-table=120p,173p,1,15,17
bmp-timer=254p,432p,1,0,0
install=bmp
... etc, etc
-----------------------------------
I don't seem to have a /etc/kernel-img.conf
Then when I get done and try to boot off of the thumb drive, it just goes into busybox and stops. I don't seem to have any real file system. Any ideas here?
Rick
[ Parent | Reply to this comment ]
The Lilo configuration has been corrected, thank you.
Regarding your issue, if the system is stopping in busybox, the most likely problem is a misconfigured lilo or grub. Check to be sure the root device is set correctly in their configuration files. I have made and corrected mistakes there.
And last but not least, for faster response please submit these comments into the forums on http://feraga.com, I monitor those for updates far more often than I do the comments here.
Thanks,
Dave
[ Parent | Reply to this comment ]
Anyway I used debian etch (1/5/2007), and kernel 2.6.19.1.
I had the exact same error you had. For some reason I got lucky and got the error that it could not find these modules - blkcipher and cbc - these are in
/lib/modules/2.6.19.1/cbc.ko
/lib/modules/2.6.19.1/blkcipher.ko
After adding these to the modules that needed to be loaded everything worked like a charm.
Thanks for this excellent thread. I have to give it a try with mkinitramfs next. I used a highly modified version of the usb initrd that was on the dm-crypt wiki.
Have fun.
[ Parent | Reply to this comment ]
The problem I have found is that "parted" doesn't make a bootable partition at first so I have solved it by using cfdisk before rebooting from the USB Key.
bye
paquin
[ Parent | Reply to this comment ]
parted /dev/sda "mklabel msdos mkpartfs primary ext2 0 -0 set 1 boot on"
Thanks.
[ Parent | Reply to this comment ]
more info from dmesg:
---------------------
scsi1 : SCSI emulation for USB Mass Storage devices
Vendor: Genesys Model: USB to IDE Disk Rev: 0033
Type: Direct-Access ANSI SCSI revision: 02
Attached scsi generic sg1 at scsi1, channel 0, id 0, lun 0, type 0
USB Mass Storage device found at 3
SCSI device sda: 4194303 512-byte hdwr sectors (2147 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
/dev/scsi/host1/bus0/target0/lun0: p1 p2
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
bye
paquin
[ Parent | Reply to this comment ]
As I've mentioned before I've been working on a new version of the howto. Although, I guess I should say "versions" because i've had a lot of requests for other media or configuration options.
Additionally I've been testing several other groups that make usb installations and for the most part I've been disappointed with them all.
So with that in mind, I've started a website to host the discussion of howto make and configure a usb based debian install. The long term goal is to create a custom debian distribution like Knoppix that focuses on removable media installs.
You can find it at: http://feraga.com
There will be lots of changes over the next few weeks so bear with us as we grow.
Thanks again to Steve Kemp, Debian-Administration.org, and everyone who has read & supported this howto. I look forward to seeing some (or all) of you over on http://feraga.com.
Dave Vehrs
[ Parent | Reply to this comment ]
Great article. I am looking for a way to install Debian on a usb drive without encryption. I've seen tons of posts but have not located a definitive article with some basic steps.
Can you give a KISS article on how to set one of these things up?
Here are some simple goals:
Basic load of Debian on USB drive.
Something simple like one partition (/) and maybe a swap drive but a swap drive may wear out flash drives.
Tips on how to keep writing to the drive at a minimum (for flash drives). ie. log files, swap files etc.
Many thanks
Eric
[ Parent | Reply to this comment ]
Additionally, we're trying to explore the other issues involved with installing on removable media as we can. Check it out, I think you'll find what you're looking for.
Dave
[ Parent | Reply to this comment ]
I'm looking for the easy instructions. For example what do I do to the USB drive after the installer has finished.
[ Parent | Reply to this comment ]
When I'm trying to execute: "grub-install /dev/sdb" it doesnt find any /dev/sd? drives. I also tried to do it outside the jail, but then I got the message: "/dev/sdb does not have any corresponding BIOS drive."
any idies?
thanks,
Rotem.
[ Parent | Reply to this comment ]
Yeah: Which one... sorry, I cannot remember.
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
I saw other of your articles at http://feraga.com/node/25 (is the same but without the crypted install description for 512MB and 1 GB flash memories) the problem is the server is not on line now, i really apreciate a copy of that article, can you send me to jaalkab(at)gmail.com
thank you in advanced, best regards
J
En busca de un sueño
tallaron la piedra
En busca de un sueño
Dios vino a la tierra
[ Parent | Reply to this comment ]
I'm working on a tool to automate the installation, and the unencrypted version should be out soon.
Dave
[ Parent | Reply to this comment ]
best regards
J
--
En busca de un sueño
tallaron la piedra
En busca de un sueño
Dios vino a la tierra
[ Parent | Reply to this comment ]
I had a initrd.img which could find /sbin/init two weeks ago. Sadly, this one lacked /dev/sd* so it couldn't find the partitions ever.
I tried to fix this a little later, and it couldn't find /sbin/init anymore. I the realized, that debian had switched from initrd to initramfs.
Now the kernel most probably can't work with initrd-images, and mkinitramfs of course produces ramdisks with no idea what to do with the encrypted partitions.
[ Parent | Reply to this comment ]
If someone can says something about this !
[ Parent | Reply to this comment ]
Does anyone know where i can find a version of this without the encryption? i just want to run Debian on a usb falsh drive but if i use the installer i get GRUB error 18. I've tried working my way though this HOWTO but get confused by all the encryption stuff, which i don't need anyway.
thanks in advance.
[ Parent | Reply to this comment ]
It will not boot if you choose LVM or Encryption. I have not tried to solve that.
Greg
[ Parent | Reply to this comment ]
It seems a shame to get so far and not get this to boot. I suppose I can archive the build with dd and try again.
I have reinstalled libdevmapper (v 1.02) and cryptsetup - as well as the kernel. I am so good at rebuilding the initrd file that I could do it in my sleep. I found some reference to a kernel patch - but that proved fruitless. I have tried to recreate the device control file both by hand and with dmsetup mknodes.
Any other advice?
Greg
[ Parent | Reply to this comment ]
Check it out at: http://feraga.com/project/deb2flash
[ Parent | Reply to this comment ]
When doing mount -a:
mount: special device BEL=PRIVDEB_BOOT does not exist
mount: mount point /etc/network/run does not exist
I've already done "e2label /dev/sdd1 PRIVDEB_BOOT" as a Reply suggests, I've also modified those HTML bugs in mkinitrd.dmcrypt-usb and added what is written in http://www.debian-administration.org/articles/179#comment_40 )
I'm a little lost, i also can't do 'grub-install /dev/sda' (while being in chroot) it returns:
/dev/sda does not have any corresponding BIOS drive.
My fstab is the same as the Howto with "tmpfs /home/(USER)/Scratch tmpfs defaults,noatime 0 0" modifies.
Don't know what else to do.
Find me at: ropechoborra (at) gmail (dot) com
[ Parent | Reply to this comment ]
"I've already done "e2label /dev/sda1 PRIVDEB_BOOT" sda instead of sdd ;)
[ Parent | Reply to this comment ]
http://gate-bunker.p6.msu.ru/~berk/router.html#DR4
as per the above document
the make go smooth with some errors
when i do make install
i get the following error
can some one help me whats wrong iam doing
make install
/dev/sdb3 labelled as FLASH_BOOT
/dev/sdb1 labelled as FLASH_ROOT
Copying files to flash... cp: cannot stat `/root/work/sarge-router-0.4.2/debootstrap/target/*': No such file or directory
make: *** [install] Error 1
ram
[ Parent | Reply to this comment ]
Finally I decided to test if I downgrade them to the version used in this tutorial , what will happen. The version used in this tutorial is 1.01. So I have to change the apt source.list to point to Ubuntu breezy and reinstall the libdevmapper and cryptsetup and dmsetup. Then reboot, it works. Magic thing happens and I had my ubuntu on usb.
Excellent tutorial and some of the comments are very helpful!
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
So remember to keep a little perspective.
[ Parent | Reply to this comment ]
Any chance you'll re-write it STEP-BY-STEP on how to do this with Etch?...
The comment above (#108 - Anonymous) ("just do this and that and the other and everything is peachy") doesn't help a noob :(
How is this done the "easy" way in Etch? Thanks
[ Parent | Reply to this comment ]
Note: This was also pointed out in comments #83 and #101. I'd edit the article to have a link to the updated howtos at top but the article is so old that editing is not allowed. :)
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
hanuman:~# grub-install /dev/sdb
/dev/sdb does not have any corresponding BIOS drive.
I have put the "--recheck" flag, then it worked
hanuman:~# grub-install --recheck /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Searching for GRUB installation directory ... found: /boot/grub
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
hanuman:~#
[ Parent | Reply to this comment ]
Can not write log, openpty() failed (/dev/pts not mounted?)
Segmentation fault (core dumped)
After some research, I realized that an additional mount is required, outside of the chroot:
mount -tdevpts /dev/pts /mnt/buildroot/dev/pts
That fixed me right up.
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
Just wondering if anyone plan to make this article an executive script. Manual operation brings lots of issues.
Cheers,
[ Parent | Reply to this comment ]
[ Parent | Reply to this comment ]
I can't reach your page.
Is the server down?
Can find your how-to anywhere else?
greez, M
[ Parent | Reply to this comment ]
I had a small hosting issue that's been resolved now and it will just take the hosting company a little while to get it all turned back on.
Try again tomorrow, should be fixed by then.
Thanks for the continued interest!
Dave V.
[ Parent | Reply to this comment ]
Thank you in advance.
Currently (14 May 08) get this trying anything @ feraga.com:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@feraga.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
[ Parent | Reply to this comment ]
Here's what happened.
A small hosting problem resulted in my content being moved to a new server (updated Mysql, PHP, etc) which caused errors on the site. I tried repeatedly to preserver the site as is or do an automated upgrade to the next version of Drupal (to 5.x from 4.7).
Nothing worked. At this stage I am working to hand move the content up to a Drupal 6.2 and its going alright. So far I've managed to port the users across and I hope to move the content & comments over soon. Once that's done I will be bringing the site back online.
I guess I should have put up a maintenance page to let you all know this...sorry about that.
As for the long delay, well I work for a small company and am very busy. So its been a back-burner item for when I have time. It would probably happen faster with some help but so far I can't seem to attract anyone interesting in posting content.....just questions. (hint hint for when its back :) ).
Also I've learned my lesson on using all kinds of weird modules that modify my links, etc. on the site. If I hadn't used a bunch of content filters then the recovery would have been much faster.
If you're just looking for the Deb2Flash installer then it can still be found at http://svn.feraga.com
Thank you for your patience.
[ Parent | Reply to this comment ]
I've upgraded the site to Drupal 6.2 and imported most the old content.
There's still work to do but we're back.
Enjoy!
[ Parent | Reply to this comment ]
Enter passphrase:
Verify passphrase:
Command failed: Key processing error: Unknown hash type ripemd160
Workaround for this
cryptsetup -y create ... -h sha1
ie. add "-h sha1" to cryptsetup command.
(it might also be possible to add ripemd160 hash algorithm to the system)
Thanks to Gorkem's comment in Pardus forum:
http://ftp.uludag.org.tr/bugzilla/2007-February/020648.html
[ Parent | Reply to this comment ]