Move the dpkg specific stuff to a dpkg element rather than being hardcoded.
This includes the install-packages implementation for dpkg, apt http proxy config, daemon blocking and unblocking. Change-Id: I8f159021d2b223d7003cec067de3aa605ad06974
This commit is contained in:
parent
3860af4be5
commit
7f77729ec5
14
README.md
14
README.md
@ -91,9 +91,17 @@ part of the process you need to customise:
|
|||||||
alternative distribution support is added, or customisations such as
|
alternative distribution support is added, or customisations such as
|
||||||
building on an existing image. If no element configures a root, the ubuntu
|
building on an existing image. If no element configures a root, the ubuntu
|
||||||
element will be automatically invoked to obtain an Ubuntu image.
|
element will be automatically invoked to obtain an Ubuntu image.
|
||||||
Runs outside the chroot on the host environment, so should cleanup after
|
Runs outside the chroot on the host environment.
|
||||||
itself using the root-finished.d hook.
|
|
||||||
NB: Only one element can use this at a time.
|
Only one element can use this at a time unless particular care is taken not
|
||||||
|
to blindly overwrite but instead to adapt the context extracted by other
|
||||||
|
elements.
|
||||||
|
|
||||||
|
* inputs: $ARCH=i386|amd64 $TARGET\_ROOT=/path/to/target/workarea
|
||||||
|
|
||||||
|
* cleanup.d: Perform cleanups of the root filesystem content. For instance,
|
||||||
|
temporary settings to use the image build environment HTTP proxy are removed
|
||||||
|
here in the dpkg element. Runs outside the chroot on the host environment.
|
||||||
|
|
||||||
* inputs: $ARCH=i386|amd64 $TARGET\_ROOT=/path/to/target/workarea
|
* inputs: $ARCH=i386|amd64 $TARGET\_ROOT=/path/to/target/workarea
|
||||||
|
|
||||||
|
@ -109,9 +109,11 @@ mount_tmp_image ${IMAGE_BLOCK_DEVICE}
|
|||||||
|
|
||||||
create_base
|
create_base
|
||||||
run_d extra-data
|
run_d extra-data
|
||||||
do_pre_install
|
# Run pre-install scripts. These do things that prepare the chroot for package installs
|
||||||
|
run_d_in_target pre-install
|
||||||
do_extra_package_install
|
do_extra_package_install
|
||||||
do_install
|
# Call install scripts to pull in the software users want.
|
||||||
|
run_d_in_target install
|
||||||
prepare_first_boot
|
prepare_first_boot
|
||||||
finalise_base
|
finalise_base
|
||||||
unmount_image
|
unmount_image
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
apt-get -y update
|
DISTRO=`lsb_release -si`
|
||||||
install-packages python-software-properties
|
|
||||||
add-apt-repository -y ppa:tripleo/demo
|
case $DISTRO in
|
||||||
|
'Ubuntu'|'Debian')
|
||||||
|
# Note: add-apt-repository would be nice for RPM platforms too - so when we
|
||||||
|
# need something like it, create a wrapper in dpkg/bin and fedora/bin.
|
||||||
|
apt-get -y update
|
||||||
|
install-packages python-software-properties
|
||||||
|
add-apt-repository -y ppa:tripleo/demo
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
8
elements/dpkg/README.md
Normal file
8
elements/dpkg/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Provide dpkg specific image building glue.
|
||||||
|
|
||||||
|
The ubuntu element needs customisations at the start and end of the image build
|
||||||
|
process that do not apply to RPM distributions, such as using the host machine
|
||||||
|
HTTP proxy when installing packages. These customisations live here, where they
|
||||||
|
can be used by any dpkg based element.
|
||||||
|
|
||||||
|
The dpkg specific version of install-packages is also kept here.
|
11
elements/dpkg/cleanup.d/40-unblock-daemons
Executable file
11
elements/dpkg/cleanup.d/40-unblock-daemons
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
sudo mv $TARGET_ROOT/sbin/start-stop-daemon.REAL $TARGET_ROOT/sbin/start-stop-daemon
|
||||||
|
sudo mv $TARGET_ROOT/sbin/initctl.REAL $TARGET_ROOT/sbin/initctl
|
||||||
|
sudo mv $TARGET_ROOT/usr/sbin/invoke-rc.d.REAL $TARGET_ROOT/usr/sbin/invoke-rc.d
|
||||||
|
|
||||||
|
|
8
elements/dpkg/cleanup.d/50-remove-img-build-proxy
Executable file
8
elements/dpkg/cleanup.d/50-remove-img-build-proxy
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
# Undo our proxy support
|
||||||
|
sudo rm -f $TARGET_ROOT/etc/apt/apt.conf.d/60img-build-proxy
|
12
elements/dpkg/root.d/50-build-with-http-cache
Executable file
12
elements/dpkg/root.d/50-build-with-http-cache
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
# If we have a network proxy, use it.
|
||||||
|
if [ -n "$http_proxy" ] ; then
|
||||||
|
sudo dd of=$TARGET_ROOT/etc/apt/apt.conf.d/60img-build-proxy << _EOF_
|
||||||
|
Acquire::http::Proxy "$http_proxy";
|
||||||
|
_EOF_
|
||||||
|
fi
|
13
elements/dpkg/root.d/60-block-apt-translations
Executable file
13
elements/dpkg/root.d/60-block-apt-translations
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
# Configure APT not to fetch translations files
|
||||||
|
sudo dd of=$TARGET_ROOT/etc/apt/apt.conf.d/95no-translations <<EOF
|
||||||
|
APT::Acquire::Languages "none";
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# And now make sure that we don't fall foul of Debian bug 641967
|
||||||
|
find $TARGET_ROOT/var/lib/apt/lists/ -type f -name '*_i18n_Translation-*' -exec sudo rm -f {} \;
|
30
elements/dpkg/root.d/99-block-daemons
Executable file
30
elements/dpkg/root.d/99-block-daemons
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
# Prevent package installs from starting daemons
|
||||||
|
sudo mv $TARGET_ROOT/sbin/start-stop-daemon $TARGET_ROOT/sbin/start-stop-daemon.REAL
|
||||||
|
sudo dd of=$TARGET_ROOT/sbin/start-stop-daemon <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
echo
|
||||||
|
echo "Warning: Fake start-stop-daemon called, doing nothing"
|
||||||
|
EOF
|
||||||
|
sudo chmod 755 $TARGET_ROOT/sbin/start-stop-daemon
|
||||||
|
|
||||||
|
sudo mv $TARGET_ROOT/sbin/initctl $TARGET_ROOT/sbin/initctl.REAL
|
||||||
|
sudo dd of=$TARGET_ROOT/sbin/initctl <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
echo "initctl (tripleo 1.0)"
|
||||||
|
echo "Warning: Fake initctl called, doing nothing"
|
||||||
|
EOF
|
||||||
|
sudo chmod 755 $TARGET_ROOT/sbin/initctl
|
||||||
|
|
||||||
|
sudo mv $TARGET_ROOT/usr/sbin/invoke-rc.d $TARGET_ROOT/usr/sbin/invoke-rc.d.REAL
|
||||||
|
sudo dd of=$TARGET_ROOT/usr/sbin/invoke-rc.d <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
echo "invoke-rc.d (tripleo 1.0)"
|
||||||
|
echo "Warning: Fake inovke-rc.d called, doing nothing"
|
||||||
|
EOF
|
||||||
|
sudo chmod 755 $TARGET_ROOT/usr/sbin/invoke-rc.d
|
1
elements/ubuntu/element-deps
Normal file
1
elements/ubuntu/element-deps
Normal file
@ -0,0 +1 @@
|
|||||||
|
dpkg
|
@ -98,12 +98,6 @@ function create_base () {
|
|||||||
sudo mount --bind /dev $TMP_MOUNT_PATH/dev
|
sudo mount --bind /dev $TMP_MOUNT_PATH/dev
|
||||||
sudo mount -t sysfs none $TMP_MOUNT_PATH/sys
|
sudo mount -t sysfs none $TMP_MOUNT_PATH/sys
|
||||||
|
|
||||||
# If we have a network proxy, use it.
|
|
||||||
if [ -n "$http_proxy" ] ; then
|
|
||||||
sudo dd of=$TMP_MOUNT_PATH/etc/apt/apt.conf.d/60img-build-proxy << _EOF_
|
|
||||||
Acquire::http::Proxy "$http_proxy";
|
|
||||||
_EOF_
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Helper function to run a command inside the chroot
|
# Helper function to run a command inside the chroot
|
||||||
@ -160,8 +154,7 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
function finalise_base () {
|
function finalise_base () {
|
||||||
# Undo our proxy support
|
TARGET_ROOT=$TMP_MOUNT_PATH run_d cleanup
|
||||||
sudo rm -f $TMP_MOUNT_PATH/etc/apt/apt.conf.d/60img-build-proxy
|
|
||||||
# Now remove the resolv.conf we created above
|
# Now remove the resolv.conf we created above
|
||||||
sudo rm -f $TMP_MOUNT_PATH/etc/resolv.conf
|
sudo rm -f $TMP_MOUNT_PATH/etc/resolv.conf
|
||||||
# The we need to recreate it as a link
|
# The we need to recreate it as a link
|
||||||
@ -175,62 +168,6 @@ function compress_image () {
|
|||||||
mv $TMP_IMAGE_PATH-new $TMP_IMAGE_PATH
|
mv $TMP_IMAGE_PATH-new $TMP_IMAGE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
function block_apt_translations () {
|
|
||||||
# Configure APT not to fetch translations files
|
|
||||||
sudo dd of=$TMP_MOUNT_PATH/etc/apt/apt.conf.d/95no-translations <<EOF
|
|
||||||
APT::Acquire::Languages "none";
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# And now make sure that we don't fall foul of Debian bug 641967
|
|
||||||
find $TMP_MOUNT_PATH/var/lib/apt/lists/ -type f -name '*_i18n_Translation-*' -exec sudo rm -f {} \;
|
|
||||||
}
|
|
||||||
|
|
||||||
function block_daemons () {
|
|
||||||
# Prevent package installs from starting daemons
|
|
||||||
sudo mv $TMP_MOUNT_PATH/sbin/start-stop-daemon $TMP_MOUNT_PATH/sbin/start-stop-daemon.REAL
|
|
||||||
sudo dd of=$TMP_MOUNT_PATH/sbin/start-stop-daemon <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
echo
|
|
||||||
echo "Warning: Fake start-stop-daemon called, doing nothing"
|
|
||||||
EOF
|
|
||||||
sudo chmod 755 $TMP_MOUNT_PATH/sbin/start-stop-daemon
|
|
||||||
|
|
||||||
sudo mv $TMP_MOUNT_PATH/sbin/initctl $TMP_MOUNT_PATH/sbin/initctl.REAL
|
|
||||||
sudo dd of=$TMP_MOUNT_PATH/sbin/initctl <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
echo "initctl (tripleo 1.0)"
|
|
||||||
echo "Warning: Fake initctl called, doing nothing"
|
|
||||||
EOF
|
|
||||||
sudo chmod 755 $TMP_MOUNT_PATH/sbin/initctl
|
|
||||||
|
|
||||||
sudo mv $TMP_MOUNT_PATH/usr/sbin/invoke-rc.d $TMP_MOUNT_PATH/usr/sbin/invoke-rc.d.REAL
|
|
||||||
sudo dd of=$TMP_MOUNT_PATH/usr/sbin/invoke-rc.d <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
echo "invoke-rc.d (tripleo 1.0)"
|
|
||||||
echo "Warning: Fake inovke-rc.d called, doing nothing"
|
|
||||||
EOF
|
|
||||||
sudo chmod 755 $TMP_MOUNT_PATH/usr/sbin/invoke-rc.d
|
|
||||||
}
|
|
||||||
|
|
||||||
function unblock_daemons () {
|
|
||||||
sudo mv $TMP_MOUNT_PATH/sbin/start-stop-daemon.REAL $TMP_MOUNT_PATH/sbin/start-stop-daemon
|
|
||||||
sudo mv $TMP_MOUNT_PATH/sbin/initctl.REAL $TMP_MOUNT_PATH/sbin/initctl
|
|
||||||
sudo mv $TMP_MOUNT_PATH/usr/sbin/invoke-rc.d.REAL $TMP_MOUNT_PATH/usr/sbin/invoke-rc.d
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_pre_install () {
|
|
||||||
block_daemons
|
|
||||||
block_apt_translations
|
|
||||||
# Run pre-install scripts. These do things that prepare the chroot for package installs
|
|
||||||
run_d_in_target pre-install
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_install () {
|
|
||||||
# Call install scripts to pull in the software users want.
|
|
||||||
run_d_in_target install
|
|
||||||
unblock_daemons
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_extra_package_install () {
|
function do_extra_package_install () {
|
||||||
# Install any packages that were requested with the -p command line option
|
# Install any packages that were requested with the -p command line option
|
||||||
if [ "$INSTALL_PACKAGES" != "" ]; then
|
if [ "$INSTALL_PACKAGES" != "" ]; then
|
||||||
|
Loading…
Reference in New Issue
Block a user