![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/sbin/ |
Upload File : |
#! /bin/sh -e # # $Id: qemu-make-debian-root 353 2008-10-16 20:28:22Z aurel32 $ # # Script to make a debian root image. # set -e which debootstrap >/dev/null || { echo "error: missing debootstrap package" >&2 exit 1 } which sfdisk >/dev/null || { echo "error: missing fdisk package" >&2 exit 1 } which mke2fs >/dev/null || { echo "error: missing e2fsprogs package" >&2 exit 1 } KEEPFS=0 SPARSE=0 while :; do case "$1" in -k) KEEPFS=1 ;; -s) SPARSE=1 ;; -ks|-sk) KEEPFS=1 SPARSE=1 ;; *) break ;; esac shift done if [ $# -lt 4 ]; then echo Usage: "$0 [-ks] size-in-MB distrib deburl image [files_to_copy_in_/root]" >&2 echo "eg $0 150 sid http://proxy:10000/debian qemu" >&2 echo "-k keep file system -s sparse image" >&2 echo "$0 is normally run as root." >&2 exit 1 fi SIZE=$1 # In Mib DISTRO=$2 URL=$3 IMAGE=$4 shift 4 # now files to copy are in "$@". We don't put them in a variable # because that would coufuse spaces-in-filenames with # whitespace-separation. if [ $SIZE -lt 130 ]; then echo 'Size must be at least 130 megabytes (Debian unstable takes 100)' >&2 exit 1 fi cleanup() { echo Cleaning up... >&2 umount -d $TMP_DIR || true losetup -d $LOOP || true rm -f $IMAGE } trap cleanup EXIT # Create a filesystem: one track for partition table. if [ "$SPARSE" = "1" ]; then truncate -s ${SIZE}M "$IMAGE" else dd bs=1M count=$SIZE if=/dev/zero of=$IMAGE fi SECT=63 # first sector of a partition # Partition so one partition covers entire disk. echo "$SECT," | sfdisk -uS -L $IMAGE # Find an unused loop device and set it up. LOOP=`losetup -f` losetup -o $(($SECT*512)) $LOOP $IMAGE # Create filesystem. mke2fs -q -m1 $LOOP TMP_DIR="$(mktemp -d /tmp/mount.XXXXXX)" || \ { echo >&2 "Failed to create temporary directory"; exit 1; } # Mount it. mount $LOOP $TMP_DIR # Do debian install on it. debootstrap --variant=minbase $DISTRO $TMP_DIR $URL # Final configuration. cat > $TMP_DIR/etc/fstab <<EOF /dev/hda1 / ext2 errors=remount-ro 0 1 proc /proc proc defaults 0 0 EOF # Console on ttyS0, not tty1, and no other gettys. sed 's,1:2345:respawn:/sbin/getty 38400 tty1,1:2345:respawn:/sbin/getty 38400 ttyS0,' < $TMP_DIR/etc/inittab | sed 's,^.:23:respawn.*,,' > $TMP_DIR/etc/inittab.new mv $TMP_DIR/etc/inittab.new $TMP_DIR/etc/inittab # Set hostname to base of image name. basename $IMAGE > $TMP_DIR/etc/hostname # Create /etc/shadow chroot $TMP_DIR pwconv # Set root password to "root" sed 's/^root:[^:]*/root:$1$aybpiIGf$cB7iFDNZvViQtQjEZ5HFQ0/' < $TMP_DIR/etc/shadow > $TMP_DIR/etc/shadow.new mv $TMP_DIR/etc/shadow.new $TMP_DIR/etc/shadow # Remove packages we don't need chroot $TMP_DIR /usr/bin/dpkg --remove console-common console-tools console-data base-config man-db manpages # Try to remove all libraries: some won't be removable. chroot $TMP_DIR dpkg --remove `chroot $TMP_DIR dpkg --get-selections | sed -n 's/^\(lib[^ \t]*\)[\t ]*install/\1/p'` 2>/dev/null || true # Copy wanted files to /root if asked to if [ $# -gt 0 ]; then cp -a "$@" $TMP_DIR/root/ fi umount -d $TMP_DIR trap "" EXIT echo Done.