Add gentoo dist
and remove ${LOG}. It's a bit of a useless mechanism and, in fact a hindrance. Why not just let the user redirect stdout?
This commit is contained in:
parent
cb8b3e3df2
commit
00a4664d73
9 changed files with 146 additions and 18 deletions
4
Makefile
4
Makefile
|
@ -46,6 +46,10 @@ $(FEDORA_BOXES):
|
||||||
@sudo chmod +rw $(PACKAGE)
|
@sudo chmod +rw $(PACKAGE)
|
||||||
@sudo chown ${USER}: $(PACKAGE)
|
@sudo chown ${USER}: $(PACKAGE)
|
||||||
|
|
||||||
|
.PHONY: gentoo
|
||||||
|
gentoo:
|
||||||
|
@sudo -E ./mk-gentoo.sh
|
||||||
|
|
||||||
acceptance: CONTAINER = "vagrant-base-acceptance-$(ARCH)"
|
acceptance: CONTAINER = "vagrant-base-acceptance-$(ARCH)"
|
||||||
acceptance: PACKAGE = "output/${TODAY}/vagrant-lxc-acceptance-$(ARCH).box"
|
acceptance: PACKAGE = "output/${TODAY}/vagrant-lxc-acceptance-$(ARCH).box"
|
||||||
acceptance:
|
acceptance:
|
||||||
|
|
|
@ -3,6 +3,13 @@ set -e
|
||||||
|
|
||||||
source common/ui.sh
|
source common/ui.sh
|
||||||
|
|
||||||
|
ROOTFS="/var/lib/lxc/${CONTAINER}/rootfs"
|
||||||
|
WORKING_DIR="/tmp/${CONTAINER}"
|
||||||
|
|
||||||
|
debug "Creating ${WORKING_DIR}"
|
||||||
|
mkdir -p ${WORKING_DIR}
|
||||||
|
mkdir -p $(dirname ${PACKAGE})
|
||||||
|
|
||||||
# TODO: Create file with build date / time on container
|
# TODO: Create file with build date / time on container
|
||||||
|
|
||||||
info "Packaging '${CONTAINER}' to '${PACKAGE}'..."
|
info "Packaging '${CONTAINER}' to '${PACKAGE}'..."
|
||||||
|
@ -16,10 +23,10 @@ if [ -f ${WORKING_DIR}/rootfs.tar.gz ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Compressing container's rootfs"
|
log "Compressing container's rootfs"
|
||||||
pushd $(dirname ${ROOTFS}) &>>${LOG}
|
pushd $(dirname ${ROOTFS})
|
||||||
tar --numeric-owner --anchored --exclude=./rootfs/dev/log -czf \
|
tar --numeric-owner --anchored --exclude=./rootfs/dev/log -czf \
|
||||||
${WORKING_DIR}/rootfs.tar.gz ./rootfs/*
|
${WORKING_DIR}/rootfs.tar.gz ./rootfs/*
|
||||||
popd &>>${LOG}
|
popd
|
||||||
|
|
||||||
# Prepare package contents
|
# Prepare package contents
|
||||||
log 'Preparing box package contents'
|
log 'Preparing box package contents'
|
||||||
|
@ -35,3 +42,6 @@ sed -i "s/<TODAY>/${NOW}/" ${WORKING_DIR}/metadata.json
|
||||||
log 'Packaging box'
|
log 'Packaging box'
|
||||||
TARBALL=$(readlink -f ${PACKAGE})
|
TARBALL=$(readlink -f ${PACKAGE})
|
||||||
(cd ${WORKING_DIR} && tar -czf $TARBALL ./*)
|
(cd ${WORKING_DIR} && tar -czf $TARBALL ./*)
|
||||||
|
|
||||||
|
chmod +rw ${PACKAGE}
|
||||||
|
chown ${USER}: ${PACKAGE}
|
||||||
|
|
|
@ -3,7 +3,8 @@ set -e
|
||||||
|
|
||||||
source common/ui.sh
|
source common/ui.sh
|
||||||
|
|
||||||
export VAGRANT_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
ROOTFS="/var/lib/lxc/${CONTAINER}/rootfs"
|
||||||
|
VAGRANT_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
||||||
|
|
||||||
info "Preparing vagrant user..."
|
info "Preparing vagrant user..."
|
||||||
|
|
||||||
|
@ -13,13 +14,13 @@ if $(grep -q 'vagrant' ${ROOTFS}/etc/shadow); then
|
||||||
elif $(grep -q 'ubuntu' ${ROOTFS}/etc/shadow); then
|
elif $(grep -q 'ubuntu' ${ROOTFS}/etc/shadow); then
|
||||||
debug 'vagrant user does not exist, renaming ubuntu user...'
|
debug 'vagrant user does not exist, renaming ubuntu user...'
|
||||||
mv ${ROOTFS}/home/{ubuntu,vagrant}
|
mv ${ROOTFS}/home/{ubuntu,vagrant}
|
||||||
chroot ${ROOTFS} usermod -l vagrant -d /home/vagrant ubuntu &>> ${LOG}
|
chroot ${ROOTFS} usermod -l vagrant -d /home/vagrant ubuntu
|
||||||
chroot ${ROOTFS} groupmod -n vagrant ubuntu &>> ${LOG}
|
chroot ${ROOTFS} groupmod -n vagrant ubuntu
|
||||||
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
||||||
log 'Renamed ubuntu user to vagrant and changed password.'
|
log 'Renamed ubuntu user to vagrant and changed password.'
|
||||||
elif [ ${DISTRIBUTION} = 'centos' -o ${DISTRIBUTION} = 'fedora' ]; then
|
elif [ ${DISTRIBUTION} = 'centos' -o ${DISTRIBUTION} = 'fedora' ]; then
|
||||||
debug 'Creating vagrant user...'
|
debug 'Creating vagrant user...'
|
||||||
chroot ${ROOTFS} useradd --create-home -s /bin/bash -u 1000 vagrant &>> ${LOG}
|
chroot ${ROOTFS} useradd --create-home -s /bin/bash -u 1000 vagrant
|
||||||
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
||||||
sed -i 's/^Defaults\s\+requiretty/# Defaults requiretty/' $ROOTFS/etc/sudoers
|
sed -i 's/^Defaults\s\+requiretty/# Defaults requiretty/' $ROOTFS/etc/sudoers
|
||||||
if [ ${RELEASE} -eq 6 ]; then
|
if [ ${RELEASE} -eq 6 ]; then
|
||||||
|
@ -30,13 +31,12 @@ elif [ ${DISTRIBUTION} = 'centos' -o ${DISTRIBUTION} = 'fedora' ]; then
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
debug 'Creating vagrant user...'
|
debug 'Creating vagrant user...'
|
||||||
chroot ${ROOTFS} useradd --create-home -s /bin/bash vagrant &>> ${LOG}
|
chroot ${ROOTFS} useradd --create-home -s /bin/bash vagrant
|
||||||
chroot ${ROOTFS} adduser vagrant sudo &>> ${LOG}
|
|
||||||
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure SSH access
|
# Configure SSH access
|
||||||
if [ -d ${ROOTFS}/home/vagrant/.ssh ]; then
|
if [ -d ${ROOTFS}/home/vagrant/.ssh/authorized_keys ]; then
|
||||||
log 'Skipping vagrant SSH credentials configuration'
|
log 'Skipping vagrant SSH credentials configuration'
|
||||||
else
|
else
|
||||||
debug 'SSH key has not been set'
|
debug 'SSH key has not been set'
|
||||||
|
|
|
@ -7,19 +7,16 @@ export WARN_COLOR='\033[33;01m'
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
||||||
echo " [${LOG_PREFIX}] ${1}" >>${LOG}
|
echo " [${LOG_PREFIX}] ${1}"
|
||||||
echo " [${LOG_PREFIX}] ${1}" >&2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
warn() {
|
warn() {
|
||||||
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
||||||
echo "==> [${LOG_PREFIX}] [WARN] ${1}" >>${LOG}
|
|
||||||
echo -e "${WARN_COLOR}==> [${LOG_PREFIX}] ${1}${NO_COLOR}"
|
echo -e "${WARN_COLOR}==> [${LOG_PREFIX}] ${1}${NO_COLOR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
info() {
|
info() {
|
||||||
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
LOG_PREFIX="${DISTRIBUTION}-${RELEASE}"
|
||||||
echo "==> [${LOG_PREFIX}] [INFO] ${1}" >>${LOG}
|
|
||||||
echo -e "${OK_COLOR}==> [${LOG_PREFIX}] ${1}${NO_COLOR}"
|
echo -e "${OK_COLOR}==> [${LOG_PREFIX}] ${1}${NO_COLOR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,21 +3,31 @@
|
||||||
utils.lxc.attach() {
|
utils.lxc.attach() {
|
||||||
cmd="$@"
|
cmd="$@"
|
||||||
log "Running [${cmd}] inside '${CONTAINER}' container..."
|
log "Running [${cmd}] inside '${CONTAINER}' container..."
|
||||||
(lxc-attach -n ${CONTAINER} -- $cmd) &>> ${LOG}
|
lxc-attach -n ${CONTAINER} -- $cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
utils.lxc.pipetofile() {
|
||||||
|
lxc-attach -n ${CONTAINER} -- /bin/bash -c "tee $1 > /dev/null"
|
||||||
|
}
|
||||||
|
|
||||||
|
utils.lxc.runscript() {
|
||||||
|
log "Running $1 inside '${CONTAINER}'..."
|
||||||
|
cat $1 | utils.lxc.pipetofile /script.sh
|
||||||
|
utils.lxc.attach /bin/bash /script.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.lxc.start() {
|
utils.lxc.start() {
|
||||||
lxc-start -d -n ${CONTAINER} &>> ${LOG} || true
|
lxc-start -d -n ${CONTAINER} || true
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.lxc.stop() {
|
utils.lxc.stop() {
|
||||||
lxc-stop -n ${CONTAINER} &>> ${LOG} || true
|
lxc-stop -n ${CONTAINER} || true
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.lxc.destroy() {
|
utils.lxc.destroy() {
|
||||||
lxc-destroy -n ${CONTAINER} &>> ${LOG}
|
lxc-destroy -n ${CONTAINER}
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.lxc.create() {
|
utils.lxc.create() {
|
||||||
lxc-create -n ${CONTAINER} "$@" &>> ${LOG}
|
lxc-create -n ${CONTAINER} "$@"
|
||||||
}
|
}
|
||||||
|
|
5
conf/gentoo
Normal file
5
conf/gentoo
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed
|
||||||
|
|
||||||
|
# Default console settings
|
||||||
|
lxc.tty = 4
|
||||||
|
lxc.pts = 1024
|
14
gentoo/clean.sh
Normal file
14
gentoo/clean.sh
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
source /etc/profile
|
||||||
|
|
||||||
|
echo "Cleaning up"
|
||||||
|
|
||||||
|
rm /script.sh
|
||||||
|
|
||||||
|
echo 'Removing temporary files...'
|
||||||
|
rm -rf /tmp/*
|
||||||
|
|
||||||
|
echo 'cleaning up distfiles'
|
||||||
|
rm -f /usr/portage/distfiles/*
|
||||||
|
|
41
gentoo/install-packages.sh
Executable file
41
gentoo/install-packages.sh
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
source /etc/profile
|
||||||
|
|
||||||
|
echo 'Installing packages and upgrading'
|
||||||
|
|
||||||
|
PACKAGES=(net-misc/curl wget man-db openssh ca-certificates sudo)
|
||||||
|
|
||||||
|
echo "Installing additional packages: ${ADDPACKAGES}"
|
||||||
|
PACKAGES+=" ${ADDPACKAGES}"
|
||||||
|
|
||||||
|
ANSIBLE=${ANSIBLE:-0}
|
||||||
|
if [[ $ANSIBLE = 1 ]]; then
|
||||||
|
PACKAGES+=' ansible'
|
||||||
|
fi
|
||||||
|
|
||||||
|
CHEF=${CHEF:-0}
|
||||||
|
if [[ $CHEF = 1 ]]; then
|
||||||
|
echo "Chef installation isn't supported on Gentoo"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PUPPET=${PUPPET:-0}
|
||||||
|
if [[ $PUPPET = 1 ]]; then
|
||||||
|
PACKAGES+=' puppet eix'
|
||||||
|
fi
|
||||||
|
|
||||||
|
SALT=${SALT:-0}
|
||||||
|
if [[ $SALT = 1 ]]; then
|
||||||
|
PACKAGES+=' salt'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# trying to set capabilities on an unprivileged container fails.
|
||||||
|
echo "*/* -filecaps" > /etc/portage/package.use/vagrant_overrides
|
||||||
|
|
||||||
|
emerge --sync
|
||||||
|
emerge --noreplace ${PACKAGES[*]}
|
||||||
|
emerge -uND @world
|
||||||
|
|
||||||
|
rc-config add sshd default
|
47
mk-gentoo.sh
Executable file
47
mk-gentoo.sh
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
source common/ui.sh
|
||||||
|
source common/utils.sh
|
||||||
|
|
||||||
|
if [ "$(id -u)" != "0" ]; then
|
||||||
|
echo "You should run this script as root (sudo)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TODAY=$(date -u +"%Y-%m-%d")
|
||||||
|
export DISTRIBUTION=gentoo
|
||||||
|
export RELEASE=current
|
||||||
|
export ARCH=$(uname -m | sed -e "s/68/38/" | sed -e "s/x86_64/amd64/")
|
||||||
|
export CONTAINER="vagrant-base-${DISTRIBUTION}-${ARCH}"
|
||||||
|
export PACKAGE="output/${TODAY}/${CONTAINER}.box"
|
||||||
|
export NOW=$(date -u)
|
||||||
|
|
||||||
|
echo '############################################'
|
||||||
|
echo "# Beginning build at $(date)"
|
||||||
|
|
||||||
|
if [ -f ${PACKAGE} ]; then
|
||||||
|
warn "The box '${PACKAGE}' already exists, skipping..."
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "Building box to '${PACKAGE}'..."
|
||||||
|
|
||||||
|
./common/download.sh
|
||||||
|
utils.lxc.start
|
||||||
|
|
||||||
|
SECS=15
|
||||||
|
log "Sleeping for $SECS seconds..."
|
||||||
|
sleep $SECS
|
||||||
|
|
||||||
|
utils.lxc.runscript gentoo/install-packages.sh
|
||||||
|
./common/prepare-vagrant-user.sh
|
||||||
|
utils.lxc.runscript gentoo/clean.sh
|
||||||
|
utils.lxc.stop
|
||||||
|
|
||||||
|
./common/package.sh
|
||||||
|
|
||||||
|
info "Finished building '${PACKAGE}'!"
|
||||||
|
log "Run \`lxc-destroy -n ${CONTAINER}\` or \`make clean\` to remove the container that was created along the way"
|
||||||
|
echo
|
Loading…
Reference in a new issue