From 9e90ef29c9f7632636df57c20485a026f8f765db Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Tue, 24 May 2011 05:01:29 -0500 Subject: [PATCH] j: support init for debian chroots using debootstrap --- init | 1 + j | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 3 deletions(-) create mode 120000 init diff --git a/init b/init new file mode 120000 index 0000000..0fe2fa5 --- /dev/null +++ b/init @@ -0,0 +1 @@ +j \ No newline at end of file diff --git a/j b/j index 6e0ed6c..9a7d1d6 100755 --- a/j +++ b/j @@ -3,7 +3,7 @@ # http://wiki.cyberleo.net/wiki/CyberLeo/COPYRIGHT # Need root beyond here -[ "$(id -u)" -eq 0 ] || exec sudo env J_BASE=${J_BASE} J_NAME=${J_NAME} J_USER=${J_USER:-${USER}} "${0}" "${@}" +[ "$(id -u)" -eq 0 ] || exec sudo env "J_ARCH=${J_ARCH}" "J_BASE=${J_BASE}" "J_NAME=${J_NAME}" "J_USER=${J_USER:-${USER}}" "${0}" "${@}" meh() { printf " \033[1;32m*\033[0m %s%s\n" "${jname:+${jname}: }" "${*}"; } omg() { printf " \033[1;33m*\033[0m %s%s\n" "${jname:+${jname}: }" "${*}"; } @@ -32,6 +32,7 @@ EOF } cmd="$(basename "${0}")" +jarch="${J_ARCH:-$(uname -m)}" jbase="${J_BASE:-$(realpath "$(dirname "${0}")/../")}" jname="${J_NAME:-$(basename "${1}")}" #" juser="${J_USER}" @@ -46,10 +47,64 @@ jenv=" USER=${USER} " +# Debian-specific init: prepare Debian chroot with debootstrap +j_init_debian() { + jdir="${1}" + suite="$(echo "${2:-squeeze}" | tr 'A-Z' 'a-z')" + + # Validation + [ "$(which debootstrap 2>&-)" ] || pebkac "j_init_debian: debootstrap not found" + [ "${jdir}" ] || pebkac "j_init_debian: jdir must be specified" + [ ! -d "${jdir}" ] || pebkac "j_init_debian: jdir must not exist ('${jdir}')" + [ -d "$(dirname "${jdir}")" ] || pebkac "j_init_debian: parent of jdir must exist ('${jdir}')" + + # Figure out arch + case "${jarch}" in + x86) arch=x86 ;; + amd64|x86_64|x64) arch=amd64 ;; + *) pebkac "Unsupported arch '${jarch}'" ;; + esac + + cmd="debootstrap --arch=${arch} --include=curl,file,less,locales,sudo,build-essential,libreadline-dev,zlib1g-dev '${suite}' '${jdir}'" + echo "Executing ${cmd}" + eval "${cmd}" + + # Make sure locales are generated on first start + mkdir -p "${jdir}/etc/rcJ.d" + cat > "${jdir}/etc/rcJ.d/S00localegen" <<"EOF" +#!/bin/sh +/bin/sed -i '/en_US/s/^# //' /etc/locale.gen +/usr/sbin/locale-gen +/bin/rm -f "${0}" +EOF + chmod 755 "${jdir}/etc/rcJ.d/S00localegen" +} + +# Gentoo-specific init: prepare Gentoo chroot with stage3+portage tarballs +j_init_gentoo() { + arch="$(uname -m)" + base="http://distfiles.gentoo.org/releases/${arch}/autobuilds" + pointer="${base}/latest-stage3.txt" + # Fetch stage3 + # Fetch portage + # Validate signatures + # Unpack stage3 + # Unpack portage +} + # Create a new chroot, somehow j_init() { - # Either a debian chroot with debootstrap or a gentoo chroot with stage3 + portage tarballs - DEBOOTSTRAP_DIR="$(base)/debootstrap" "${DEBOOTSTRAP_DIR}/debootstrap" --arch=amd64 squeeze "${jdir}" + # Make sure this does NOT exist + jname="${1:-jname}" + dist="$(echo "${2:-debian}" | tr 'A-Z' 'a-z')" + jdir="${jbase}/${jname}" + [ -d "${jdir}" ] && pebkac "j_init: ${jname} already exists" + shift 2 + case "${dist}" in + debian) j_init_debian "${jdir}" "${@}" ;; + gentoo) j_init_gentoo "${jdir}" "${@}" ;; + *) pebkac "Unsupported distro '${dist}'" ;; + esac } # Figure out and set chroot parameters; needed for all functions that follow @@ -177,6 +232,7 @@ j_stop() { } case "${cmd}" in +init|create) j_init "${jname}" "${@}" ;; ls|list) j_ls ;; status) j_status "${jname}" "${@}" ;; start) j_start "${jname}" ;; -- 2.42.0