mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-09 14:39:15 +00:00
lxc-debian: added support for package installation
- added --mirror, --security-mirror and --package parameters - generate source.list - install packages into final lxc instance Signed-off-by: Alexander Dreweke <alexander@dreweke.net> Acked-by: Stéphane Graber <stgraber@ubuntu.com>
This commit is contained in:
parent
b3d3f3c661
commit
177f2cd2c2
@ -34,6 +34,7 @@ done
|
|||||||
export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
|
export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
MIRROR=${MIRROR:-http://cdn.debian.net/debian}
|
MIRROR=${MIRROR:-http://cdn.debian.net/debian}
|
||||||
|
SECURITY_MIRROR=${SECURITY_MIRROR:-http://cdn.debian.net/debian-security}
|
||||||
LOCALSTATEDIR="@LOCALSTATEDIR@"
|
LOCALSTATEDIR="@LOCALSTATEDIR@"
|
||||||
LXC_TEMPLATE_CONFIG="@LXCTEMPLATECONFIG@"
|
LXC_TEMPLATE_CONFIG="@LXCTEMPLATECONFIG@"
|
||||||
|
|
||||||
@ -154,6 +155,34 @@ EOF
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_sourceslist()
|
||||||
|
{
|
||||||
|
local rootfs="$1"; shift
|
||||||
|
local release="$1"; shift
|
||||||
|
local arch="$1"; shift
|
||||||
|
|
||||||
|
local prefix="deb"
|
||||||
|
if [ -n "${arch}" ]; then
|
||||||
|
prefix="deb [arch=${arch}]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> "${rootfs}/etc/apt/sources.list" << EOF
|
||||||
|
${prefix} $MIRROR ${release} main contrib non-free
|
||||||
|
${prefix} $SECURITY_MIRROR ${release}/update main contrib non-free
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
install_packages()
|
||||||
|
{
|
||||||
|
local rootfs="$1"; shift
|
||||||
|
local packages="$*"
|
||||||
|
|
||||||
|
chroot ${rootfs} apt-get update
|
||||||
|
if [ -n "${packages}" ]; then
|
||||||
|
chroot ${rootfs} apt-get install --force-yes -y --no-install-recommends ${packages}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
cleanup()
|
cleanup()
|
||||||
{
|
{
|
||||||
rm -rf $cache/partial-$release-$arch
|
rm -rf $cache/partial-$release-$arch
|
||||||
@ -302,6 +331,46 @@ EOF
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
post_process()
|
||||||
|
{
|
||||||
|
local rootfs="$1"; shift
|
||||||
|
local release="$1"; shift
|
||||||
|
local arch="$1"; shift
|
||||||
|
local hostarch="$1"; shift
|
||||||
|
local packages="$*"
|
||||||
|
|
||||||
|
# Disable service startup
|
||||||
|
cat > ${rootfs}/usr/sbin/policy-rc.d << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exit 101
|
||||||
|
EOF
|
||||||
|
chmod +x ${rootfs}/usr/sbin/policy-rc.d
|
||||||
|
|
||||||
|
# If the container isn't running a native architecture, setup multiarch
|
||||||
|
if [ "${arch}" != "${hostarch}" ]; then
|
||||||
|
mkdir -p ${rootfs}/etc/dpkg/dpkg.cfg.d
|
||||||
|
echo "foreign-architecture ${hostarch}" > ${rootfs}/etc/dpkg/dpkg.cfg.d/lxc-multiarch
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Write a new sources.list containing both native and multiarch entries
|
||||||
|
> ${rootfs}/etc/apt/sources.list
|
||||||
|
if [ "${arch}" = "${hostarch}" ]; then
|
||||||
|
write_sourceslist ${rootfs} ${release} ${arch}
|
||||||
|
else
|
||||||
|
write_sourceslist ${rootfs} ${release}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Packages in container
|
||||||
|
if [ -n "${packages}" ]; then
|
||||||
|
local pack_list="`echo ${packages} | sed 's/,/ /g'`"
|
||||||
|
echo "Installing packages: ${pack_list}"
|
||||||
|
install_packages ${rootfs} ${pack_list}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Re-enable service startup
|
||||||
|
rm ${rootfs}/usr/sbin/policy-rc.d
|
||||||
|
}
|
||||||
|
|
||||||
clean()
|
clean()
|
||||||
{
|
{
|
||||||
cache="$LOCALSTATEDIR/cache/lxc/debian"
|
cache="$LOCALSTATEDIR/cache/lxc/debian"
|
||||||
@ -328,14 +397,17 @@ clean()
|
|||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
$1 -h|--help -p|--path=<path> [-a|--arch] [-r|--release=<release>] [-c|--clean]
|
$1 -h|--help -p|--path=<path> [-a|--arch] [-c|--clean] [--mirror=<mirror>] [-r|--release=<release>] [--security-mirror=<security mirror>]
|
||||||
release: the debian release (e.g. wheezy): defaults to current stable
|
|
||||||
arch: the container architecture (e.g. amd64): defaults to host arch
|
arch: the container architecture (e.g. amd64): defaults to host arch
|
||||||
|
release: the debian release (e.g. wheezy): defaults to current stable
|
||||||
|
mirror: debain mirror to use during installation
|
||||||
|
security mirror: debain mirror to use for security updates
|
||||||
|
packages: list of packages to add comma separated
|
||||||
EOF
|
EOF
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
options=$(getopt -o hp:n:a:r:c -l help,rootfs:,path:,name:,arch:,release:,clean -- "$@")
|
options=$(getopt -o hp:n:a:r:c -l arch:,clean,help,mirror:,name:,packages:,path:,release:,rootfs:,security-mirror: -- "$@")
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
usage $(basename $0)
|
usage $(basename $0)
|
||||||
exit 1
|
exit 1
|
||||||
@ -359,15 +431,19 @@ hostarch=$arch
|
|||||||
while true
|
while true
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
-h|--help) usage $0 && exit 1;;
|
-h|--help) usage $0 && exit 1;;
|
||||||
-p|--path) path=$2; shift 2;;
|
--) shift 1; break ;;
|
||||||
--rootfs) rootfs=$2; shift 2;;
|
|
||||||
-a|--arch) arch=$2; shift 2;;
|
-a|--arch) arch=$2; shift 2;;
|
||||||
-r|--release) release=$2; shift 2;;
|
-c|--clean) clean=$2; shift 1;;
|
||||||
-n|--name) name=$2; shift 2;;
|
--mirror) MIRROR=$2; shift 2;;
|
||||||
-c|--clean) clean=$2; shift 1;;
|
-n|--name) name=$2; shift 2;;
|
||||||
--) shift 1; break ;;
|
--packages) packages=$2; shift 2;;
|
||||||
*) break ;;
|
-p|--path) path=$2; shift 2;;
|
||||||
|
-r|--release) release=$2; shift 2;;
|
||||||
|
--rootfs) rootfs=$2; shift 2;;
|
||||||
|
--security-mirror) SECURITY_MIRROR=$2; shift 2;;
|
||||||
|
*) break ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -434,7 +510,6 @@ if [ -z "$rootfs" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
install_debian $rootfs $release $arch
|
install_debian $rootfs $release $arch
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "failed to install debian"
|
echo "failed to install debian"
|
||||||
@ -453,6 +528,8 @@ if [ $? -ne 0 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
post_process ${rootfs} ${release} ${arch} ${hostarch} ${packages}
|
||||||
|
|
||||||
if [ ! -z $clean ]; then
|
if [ ! -z $clean ]; then
|
||||||
clean || exit 1
|
clean || exit 1
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
Reference in New Issue
Block a user