#!/bin/bash # LibreChRoot # Enters a chroot # Copyright 2010 Nicolás Reynolds # Copyright 2011 Joshua Haase # Copyright 2012 Luke Shumaker # ---------- GNU General Public License 3 ---------- # This file is part of Parabola. # Parabola is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # Parabola is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with Parabola. If not, see . . /etc/libretools.conf cmd=${0##*/} clean_chroot() { # Clean packages with pacman msg "Cleaning chroot with pacman: ${chroot_path}" cp -a "$(dirname $0)/chcleanup" "${chroot_path}/clean" mkarchroot -r "cd /build; /clean" "${chroot_path}" #mkarchroot "${chroot_path}" base base-devel sudo "${CHROOTEXTRAPKG[@]}" } clean_repo() { msg "Cleaning repo for chroot: ${chroot_path}" if [ -d "${chroot_path}/repo" ]; then find "${chroot_path}/repo/" -mindepth 1 -delete else mkdir -p "${chroot_path}/repo" fi bsdtar -czf "${chroot_path}/repo/repo.db.tar.gz" -T /dev/null ln -s "repo.db.tar.gz" "${chroot_path}/repo/repo.db" } update() { msg "Updating chroot: ${chroot_path}" mkarchroot -u "${chroot_path}" } enter() { msg "Entering chroot: ${chroot_path}" mkarchroot -r "bash" "${chroot_path}" } usage() { echo "Usage: $cmd [OPTIONS] [CHROOT]" echo 'Interacts with a chroot.' echo '' echo "The default CHROOT is \`${CHROOT}'." echo '' echo 'Options:' echo ' Settings:' echo " -d Use this dir instead of \`${CHROOTDIR}'" echo ' -l Use this as the chroot copy instead of basing it' echo ' on the username' echo ' Modes:' echo ' -h Show this message' echo ' -c Clean the chroot using pacman' echo ' -r Clean /repo in the chroot' echo ' -u Update the chroot' } main() { # The logic for setting CHROOTCOPY is mirred from makechrootpkg CHROOTCOPY=$USER [[ -n $SUDO_USER ]] && CHROOTCOPY=$SUDO_USER [[ -z $CHROOTCOPY || $CHROOTCOPY = root ]] && CHROOTCOPY=copy local mode=enter while getopts 'hrcud:l:' arg; do case $arg in d) CHROOTDIR=$OPTARG;; l) CHROOTCOPY=$OPTARG;; c) mode=clean_chroot;; r) mode=clean_repo;; u) mode=update;; h) usage; exit 0;; *) usage; exit 1;; esac done shift $(($OPTIND - 1)) case $# in 0) :;; 1) CHROOT="$1";; *) usage; exit 1;; esac # not local chroot_path="${CHROOTDIR}/${CHROOT}/${CHROOTCOPY}" if (( EUID )); then error "This script must be run as root." exit 1 fi case "$mode" in clean_chroot) clean_chroot; exit $?;; clean_repo) clean_repo; exit $?;; update) update; exit $?;; enter) enter; exit $?;; esac } main "$@"