blob: 6d8a9a4eda6cf601ce27f7c1b216e3acd7eec00e [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2018 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -e
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
. $SCRIPT_DIR/common.sh
chroot_sanity_check
cd /root
# Add the needed debian sources
cat >/etc/apt/sources.list <<EOF
deb http://ftp.debian.org/debian stretch main
deb-src http://ftp.debian.org/debian stretch main
deb http://ftp.debian.org/debian stretch-backports main
deb-src http://ftp.debian.org/debian stretch-backports main
deb http://ftp.debian.org/debian buster main
deb-src http://ftp.debian.org/debian buster main
EOF
# Make sure apt doesn't want to install from buster by default
cat >/etc/apt/apt.conf.d/80default <<EOF
APT::Default-Release "stretch";
EOF
# Disable the automatic installation of recommended packages
cat >/etc/apt/apt.conf.d/90recommends <<EOF
APT::Install-Recommends "0";
EOF
# Deprioritize buster, so it must be specified manually
cat >/etc/apt/preferences.d/90buster <<EOF
Package: *
Pin: release a=buster
Pin-Priority: 90
EOF
# Update for the above changes
apt-get update
# Install python-scapy from buster, because stretch's version is broken
apt-get install -y -t buster python-scapy
# Note what we have installed; we will go back to this
LANG=C dpkg --get-selections | sort >originally-installed
# Install everything needed from stretch to build iptables
apt-get install -y \
build-essential \
autoconf \
automake \
bison \
debhelper \
devscripts \
fakeroot \
flex \
libmnl-dev \
libnetfilter-conntrack-dev \
libnfnetlink-dev \
libnftnl-dev \
libtool
# Install newer linux-libc headers (these are from 4.16)
apt-get install -y -t stretch-backports linux-libc-dev
# We are done with apt; reclaim the disk space
apt-get clean
# Construct the iptables source package to build
iptables=iptables-1.6.1
mkdir -p /usr/src/$iptables
cd /usr/src/$iptables
# Download a specific revision of iptables from AOSP
aosp_iptables=android-wear-p-preview-2
wget -qO - \
https://android.googlesource.com/platform/external/iptables/+archive/$aosp_iptables.tar.gz | \
tar -zxf -
# Download a compatible 'debian' overlay from Debian salsa
# We don't want all of the sources, just the Debian modifications
debian_iptables=1.6.1-2_bpo9+1
debian_iptables_dir=pkg-iptables-debian-$debian_iptables
wget -qO - \
https://salsa.debian.org/pkg-netfilter-team/pkg-iptables/-/archive/debian/$debian_iptables/$debian_iptables_dir.tar.gz | \
tar --strip-components 1 -zxf - \
$debian_iptables_dir/debian
cd -
cd /usr/src
# Generate a source package to leave in the filesystem. This is done for license
# compliance and build reproducibility.
tar --exclude=debian -cf - $iptables | \
xz -9 >`echo $iptables | tr -s '-' '_'`.orig.tar.xz
cd -
cd /usr/src/$iptables
# Build debian packages from the integrated iptables source
dpkg-buildpackage -F -us -uc
cd -
# Record the list of packages we have installed now
LANG=C dpkg --get-selections | sort >installed
# Compute the difference, and remove anything installed between the snapshots
dpkg -P `comm -3 originally-installed installed | sed -e 's,install,,' -e 's,\t,,' | xargs`
cd /usr/src
# Find any packages generated, resolve to the debian package name, then
# exclude any compat, header or symbol packages
packages=`find -maxdepth 1 -name '*.deb' | colrm 1 2 | cut -d'_' -f1 |
grep -ve '-compat$\|-dbg$\|-dbgsym$\|-dev$' | xargs`
# Install the patched iptables packages, and 'hold' then so
# "apt-get dist-upgrade" doesn't replace them
dpkg -i `
for package in $packages; do
echo ${package}_*.deb
done | xargs`
for package in $packages; do
echo "$package hold" | dpkg --set-selections
done
# Tidy up the mess we left behind, leaving just the source tarballs
rm -rf $iptables *.buildinfo *.changes *.deb *.dsc
cd -
# Ensure a getty is spawned on ttyS0, if booting the image manually
ln -s /lib/systemd/system/serial-getty\@.service \
/etc/systemd/system/getty.target.wants/serial-getty\@ttyS0.service
# systemd needs some directories to be created
mkdir -p /var/lib/systemd/coredump /var/lib/systemd/rfkill
# Finalize and tidy up the created image
chroot_cleanup