Add easy-build.sh script

A new wrapper script around build.sh that should make it a lot easier
for new users to use debian-cd and to build custom images.
This commit is contained in:
Frans Pop 2008-10-14 08:22:03 +00:00
parent bb9fad3216
commit aec7c50df4
4 changed files with 189 additions and 1 deletions

2
debian/changelog vendored
View File

@ -118,6 +118,8 @@ debian-cd (3.0.5) UNRELEASED; urgency=low
* Drop support for building Sarge CDs. * Drop support for building Sarge CDs.
* Allow multi-arch builds using D-I images from official mirrors or local * Allow multi-arch builds using D-I images from official mirrors or local
D-I images. D-I images.
* Add easy-build.sh, a wrapper script for building images that takes care
of a lot of the gotchas that can make debian-cd hard to use.
-- Frans Pop <fjp@debian.org> Tue, 14 Oct 2008 10:01:20 +0200 -- Frans Pop <fjp@debian.org> Tue, 14 Oct 2008 10:01:20 +0200

3
debian/rules vendored
View File

@ -24,7 +24,8 @@ install-stamp: build-stamp
# Add here commands to install the package into debian/tmp. # Add here commands to install the package into debian/tmp.
cp -r tools tasks data Makefile README README.devel build.sh \ cp -r tools tasks data Makefile README README.devel build.sh \
build_all.sh update-cd debian/debian-cd/usr/share/debian-cd/ build_all.sh update-cd easy-build.sh \
debian/debian-cd/usr/share/debian-cd/
cp debian/CONF.sh debian/debian-cd/etc/debian-cd/conf.sh cp debian/CONF.sh debian/debian-cd/etc/debian-cd/conf.sh
ln -sf /etc/debian-cd/conf.sh \ ln -sf /etc/debian-cd/conf.sh \
debian/debian-cd/usr/share/debian-cd/CONF.sh debian/debian-cd/usr/share/debian-cd/CONF.sh

149
easy-build.sh Executable file
View File

@ -0,0 +1,149 @@
#! /bin/sh
set -e
## Wrapper script for build.sh
## See README.easy-build for instructions how to use this script.
## See also CONF.sh for the meaning of variables used here.
show_usage() {
echo "Usage: $(basename $0) BC|NETINST|CD|DVD [<ARCH> ...]"
}
# Set configuration file to be used for the build and source it
export CF=CONF.sh
. $CF
export DEBIAN_CD_CONF_SOURCED=true
unset UPDATE_LOCAL
## Parse the parameters passed to the script
if [ $# -eq 0 ]; then
show_usage
exit 1
fi
export DISKTYPE="$1"
shift
# The architecture(s) for which to build the CD/DVD image
if [ "$1" ]; then
ARCHES="$@"
else
ARCHES=i386
fi
## For what release to build images
# The suite the installed system will be based on
export CODENAME=lenny
# The suite from which the udebs for the installer will be taken (normally
# the same as CODENAME)
export DI_CODENAME=lenny
## The debian-installer images to use. This must match the suite (DI_CODENAME)
## from which udebs will be taken.
## Use *only one* of the next four settings. The "%ARCH%" placeholder in the
## 2nd and 4th options will be magically expanded at runtime.
## See also: tools/boot/<codename>/boot-$ARCH scripts.
# Use official images from the local mirror
export DI_DIST=$DI_CODENAME
# or, use official images from an outside mirror
#export DI_WWW_HOME="http://ftp.nl.debian.org/debian/dists/$DI_CODENAME/main/installer-%ARCH%/current/images/"
# or, use daily built d-i images (most from http://people.debian.org)
#export DI_WWW_HOME=default
# or, use custom / locally built images
#export DI_DIR="$HOME/d-i_images/%ARCH%"
## Other options
# Include local packages in the build
#export LOCAL=1
# Automatically update the Packages file(s) for the "local" repository?
#UPDATE_LOCAL=1
# Number of CD/DVDs to build; comment out to build full set
MAX_CDS=1
MAX_DVDS=1
# Only create the ISO files; don't create jigdo files
#MAXISOS=0
MAXJIGDOS=0
## Options that include CODENAME should be set here if needed, not in CONF.sh
# Include proposed-updates
#export PROPOSED_UPDATES=$CODENAME-proposed-updates
#export EXCLUDE1="$BASEDIR"/tasks/exclude-$CODENAME
#export UNEXCLUDE2="$BASEDIR"/tasks/unexclude-CD2-$CODENAME
#export UDEB_INCLUDE="$BASEDIR"/data/$CODENAME/udeb_include
#export UDEB_EXCLUDE="$BASEDIR"/data/$CODENAME/udeb_exclude
#export BASE_INCLUDE="$BASEDIR"/data/$CODENAME/base_include
#export BASE_EXCLUDE="$BASEDIR"/data/$CODENAME/base_exclude
#export SPLASHPNG="$BASEDIR/data/$CODENAME/splash-img.png"
#export RELEASE_NOTES_LOCATION="http://www.debian.org/releases/$CODENAME"
## The rest of the script should just work without any changes
# Set variables that determine the type of image to be built
case $DISKTYPE in
BC)
export INSTALLER_CD=1
;;
NETINST)
export INSTALLER_CD=2
;;
CD)
unset INSTALLER_CD
[ -z "$MAX_CDS" ] || export MAXCDS=$MAX_CDS
;;
DVD)
export INSTALLER_CD=3
[ -z "$MAX_DVDS" ] || export MAXCDS=$MAX_DVDS
;;
*)
show_usage
exit 1
;;
esac
if [ "$LOCAL" ] && [ "$UPDATE_LOCAL" ]; then
echo "Updating Packages files for local repository..."
for arch in $ARCHES; do
./tools/Packages-gen.sh $CODENAME $arch
./tools/Packages-gen.sh -i $DI_CODENAME $arch
done
fi
if [ -d tasks ]; then
echo "Updating debian-installer task files..."
(
cd tasks
../tools/generate_di_list
../tools/generate_di+k_list
)
else
echo "Error: cannot find tasks directory"
exit 1
fi
echo
echo "Starting the actual debian-cd build..."
./build.sh "$ARCHES"
# Avoid conflicts when the repository is updated later
if [ -d .svn ]; then
echo
echo "Cleanup: reverting generated changes in tasks..."
svn revert tasks/debian-installer-* \
tasks/debian-installer+kernel-*
fi

36
tools/Packages-gen.sh Executable file
View File

@ -0,0 +1,36 @@
#! /bin/sh
set -e
dir=${LOCALDEBS:-$MIRROR}
if [ ! -d "$dir" ]; then
echo "error: directory '$dir' does not exist"
echo "Check that the MIRROR or LOCALDEBS variable is set correctly."
exit 1
fi
cd $dir
DI=
if [ "$1" = "-i" ]; then
DI=1
shift
fi
distr=$1
arch=$2
if [ -z "$distr" ] || [ -z "$arch" ]; then
echo "Usage: $(basename $0) [-i] <codename> <arch>"
exit 1
elif [ ! -d dists/$distr/local/ ]; then
echo "No local repository matching '$distr' was found"
exit 1
fi
if [ -z "$DI" ]; then
repo="dists/$distr/local/binary-$arch"
else
repo="dists/$distr/local/debian-installer/binary-$arch"
fi
[ -d $repo ] || mkdir -p $repo
echo Creating Packages file for $repo...
apt-ftparchive packages $repo | gzip >$repo/Packages.gz