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 ]