mirror of
https://github.com/iana-org/coen.git
synced 2025-05-09 18:17:21 +00:00
First public release (v0.4.0)
This commit is contained in:
commit
5190c47807
34
Dockerfile
Normal file
34
Dockerfile
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
FROM debian:9.4-slim@sha256:91e111a5c5314bc443be24cf8c0d59f19ffad6b0ea8ef8f54aedd41b8203e3e1
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
|
COPY create-iso.sh .
|
||||||
|
COPY variables.sh .
|
||||||
|
COPY SHA256SUMS .
|
||||||
|
COPY tools/ /tools/
|
||||||
|
|
||||||
|
RUN sha256sum -c SHA256SUMS
|
||||||
|
|
||||||
|
RUN . ./variables.sh && \
|
||||||
|
rm -f /etc/apt/sources.list && \
|
||||||
|
echo "deb http://snapshot.debian.org/archive/debian/$(date --date "$DATE" '+%Y%m%dT%H%M%SZ') $DIST main" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://snapshot.debian.org/archive/debian/$(date --date "$DATE" '+%Y%m%dT%H%M%SZ') "$DIST"-updates main" >> /etc/apt/sources.list && \
|
||||||
|
echo "deb http://snapshot.debian.org/archive/debian-security/$(date --date "$DATE" '+%Y%m%dT%H%M%SZ') "$DIST"/updates main" >> /etc/apt/sources.list
|
||||||
|
|
||||||
|
RUN apt-get update -o Acquire::Check-Valid-Until=false && \
|
||||||
|
apt-get install -o Acquire::Check-Valid-Until=false --no-install-recommends --yes \
|
||||||
|
liblzo2-2 xorriso debootstrap \
|
||||||
|
locales && \
|
||||||
|
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen && \
|
||||||
|
locale-gen en_US.UTF-8
|
||||||
|
|
||||||
|
ENV LANG en_US.UTF-8
|
||||||
|
ENV LANGUAGE en_US:en
|
||||||
|
ENV LC_ALL en_US.UTF-8
|
||||||
|
|
||||||
|
RUN dpkg-reconfigure locales
|
||||||
|
|
||||||
|
RUN dpkg -i /tools/squashfs-tools_4.3-3.0tails4_amd64.deb && \
|
||||||
|
dpkg -i /tools/debuerreotype_0.7-1_all.deb
|
||||||
|
|
||||||
|
CMD ["/create-iso.sh"]
|
14
LICENSE.md
Normal file
14
LICENSE.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Copyright (c) 2018 Internet Corporation for Assigned Names and Numbers
|
||||||
|
("ICANN")
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED “AS IS" AND ICANN DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ICANN BE LIABLE FOR ANY
|
||||||
|
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
30
Makefile
Normal file
30
Makefile
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
RELEASE = 0.4.0
|
||||||
|
|
||||||
|
.PHONY: usage build remove run copy all default
|
||||||
|
|
||||||
|
usage:
|
||||||
|
@echo "Please provide an option:"
|
||||||
|
@echo " make build --- Build the COEN ISO image"
|
||||||
|
@echo " make run --- Run a container to build the ISO image"
|
||||||
|
@echo " make remove --- Remove the container"
|
||||||
|
@echo " make copy --- Copy the ISO image into the host directory"
|
||||||
|
@echo " make all --- Execute build, remove, run and copy"
|
||||||
|
|
||||||
|
build:
|
||||||
|
docker build -t coen:$(RELEASE) .
|
||||||
|
|
||||||
|
remove:
|
||||||
|
-docker rm coen
|
||||||
|
|
||||||
|
run:
|
||||||
|
docker run -i -t \
|
||||||
|
--privileged \
|
||||||
|
--name=coen \
|
||||||
|
coen:$(RELEASE)
|
||||||
|
|
||||||
|
copy:
|
||||||
|
-docker cp coen:/opt/coen-${RELEASE}-amd64.iso .
|
||||||
|
|
||||||
|
all: build remove run copy
|
||||||
|
|
||||||
|
default: usage
|
126
README.md
Normal file
126
README.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
# Ceremony Operating ENvironment (COEN)
|
||||||
|
|
||||||
|
COEN is a live operating system consisting of:
|
||||||
|
|
||||||
|
- A custom Debian GNU/Linux Live CD
|
||||||
|
- The [Key Management Tools](https://github.com/iana-org/dnssec-keytools)
|
||||||
|
- The AEP Keyper PKCS#11 provider
|
||||||
|
- Assorted utilities.
|
||||||
|
|
||||||
|
## Reproducible ISO image to make The Root Zone DNSSEC Key Signing Key Ceremony System more Trustworthy
|
||||||
|
|
||||||
|
This **Reproducible** ISO image provide a verifiable process to obtain the same
|
||||||
|
hash every time at build the ISO image to increase the confidence in the DNSSEC Key
|
||||||
|
Signing Key (KSK) for the Root Zone.
|
||||||
|
|
||||||
|
### What are reproducible builds?
|
||||||
|
|
||||||
|
Quoted from https://reproducible-builds.org
|
||||||
|
|
||||||
|
> Reproducible builds are a set of software development practices that create a
|
||||||
|
verifiable path from human readable source code to the binary code used by
|
||||||
|
computers.
|
||||||
|
>
|
||||||
|
> Most aspects of software verification are done on source code, as that is what
|
||||||
|
humans can reasonably understand. But most of the time, computers require
|
||||||
|
software to be first built into a long string of numbers to be used. With
|
||||||
|
reproducible builds, multiple parties can redo this process independently and
|
||||||
|
ensure they all get exactly the same result. We can thus gain confidence that a
|
||||||
|
distributed binary code is indeed coming from a given source code.
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
This project cannot be possible without:
|
||||||
|
- The [Reproducible Builds](https://reproducible-builds.org/) project
|
||||||
|
- [Debian as trust anchor](https://wiki.debian.org/ReproducibleBuilds)
|
||||||
|
- [Debuerreotype](https://github.com/debuerreotype/debuerreotype) a reproducible, snapshot-based Debian rootfs builder ([License](https://github.com/debuerreotype/debuerreotype/blob/master/LICENSE))
|
||||||
|
- (The Amnesic Incognito Live System)[https://tails.boum.org/index.en.html] ([License](https://tails.boum.org/doc/about/license/index.en.html))
|
||||||
|
|
||||||
|
## Requirements for building the ISO image
|
||||||
|
|
||||||
|
Building the ISO image requires:
|
||||||
|
|
||||||
|
* [Docker](https://www.docker.com/). The recommended Docker version is 18.03.
|
||||||
|
* SELinux to be disabled. SELinux must be completely disabled rather than with **permissive mode** since the behave is differently.
|
||||||
|
|
||||||
|
### Disabling SELinux
|
||||||
|
|
||||||
|
If you are running a Red Hat based distribution, including RHEL, CentOS and
|
||||||
|
Fedora, you will probably have the SELinux security module installed.
|
||||||
|
|
||||||
|
To check your SELinux mode, run `sestatus` and check the output.
|
||||||
|
|
||||||
|
If you see **enforcing** or **permissive** on *"Current mode"*, SELinux is
|
||||||
|
enabled and enforcing rules or is enable and log rather than enforce errors.
|
||||||
|
|
||||||
|
> **Warning** before proceeding with this, disabling SELinux also disables the
|
||||||
|
generation of file contexts so an entire system relabeling is needed afterwards.
|
||||||
|
|
||||||
|
To disable SELinux:
|
||||||
|
|
||||||
|
- Edit `/etc/sysconfig/selinux` or `/etc/selinux/config` depending of your distro
|
||||||
|
- Set the `SELINUX` parameter to `disabled`
|
||||||
|
- For the changes to take effect, you need to **reboot** the machine, since
|
||||||
|
SELinux is running within the kernel
|
||||||
|
- Check the status of SELinux using `sestatus` command
|
||||||
|
|
||||||
|
## Building the ISO image
|
||||||
|
|
||||||
|
Execute the following commands to build the ISO image:
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/iana-org/coen && \
|
||||||
|
cd coen && \
|
||||||
|
make all
|
||||||
|
```
|
||||||
|
* If you have a error executing `make all` as a non-root user, try to
|
||||||
|
execute `sudo make all`.
|
||||||
|
|
||||||
|
This will build a docker image with the proper environment to build the
|
||||||
|
ISO. Then will run a container executing a bash script to build the ISO and
|
||||||
|
if the build succeeded it will copy the resulting ISO into the host directory.
|
||||||
|
|
||||||
|
You can execute `make` command to see more options.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
### If the build failed
|
||||||
|
|
||||||
|
Please send us an issue report at https://github.com/iana-org/coen with the error
|
||||||
|
that is displayed in your terminal window.
|
||||||
|
|
||||||
|
### If the reproduction succeeded
|
||||||
|
|
||||||
|
Congrats for successfully reproducing the ISO image!
|
||||||
|
|
||||||
|
You can compute the SHA-256 checksum of the resulting ISO image by yourself:
|
||||||
|
|
||||||
|
```
|
||||||
|
sha256sum coen-0.4.0-amd64.iso
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```
|
||||||
|
shasum -a 256 coen-0.4.0-amd64.iso
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, comparing it with the following checksum:
|
||||||
|
|
||||||
|
```
|
||||||
|
8105b885b176741d25ef9d391c6a302aed3f6c916093a621a865cb90d560774f coen-0.4.0-amd64.iso
|
||||||
|
```
|
||||||
|
|
||||||
|
### If the reproduction failed
|
||||||
|
|
||||||
|
Please help us to improve it. You can install `diffoscope` https://diffoscope.org/
|
||||||
|
and download the image from:
|
||||||
|
https://github.com/iana-org/coen/releases/tag/v0.4.0-20180311
|
||||||
|
and then compare it with your image executing the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
diffoscope \
|
||||||
|
--text diffoscope.txt \
|
||||||
|
path/to/public/coen-0.4.0-amd64.iso \
|
||||||
|
path/to/your/coen-0.4.0-amd64.iso
|
||||||
|
```
|
||||||
|
Please send us an issue report at https://github.com/iana-org/coen attaching the
|
||||||
|
diffoscope.txt file.
|
24
SHA256SUMS
Normal file
24
SHA256SUMS
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
f9fd8d851d5a855cfa97eafe062418fb97e9cb574bab77326e9a34f9e8aa2c98 ./create-iso.sh
|
||||||
|
c93b498e8599dd2368ae92622aee2342a312f84ae216eb2ece659fa9e4864ca3 ./tools/debuerreotype_0.7-1_all.deb
|
||||||
|
dbed950a8b2e9c35dd76002e414268697a4b84749625753266c13bfbfa5eccb8 ./tools/hooks/00-install-ksk-packages.sh
|
||||||
|
fa97bedd94635866336547f7f5c2aaeff10e8533ed86e4819d3820d8ccb1c862 ./tools/hooks/01-fix-fontconfig-cache.sh
|
||||||
|
86441e5494f5444c4d14c6e78d0250d86706e4422fc030d538197b0a60ddf5bf ./tools/hooks/02-fix-initramfs-tools.sh
|
||||||
|
fc6ad08b3d8d5fd08e64e031b31766355a6faa4249971fca17fd382f42318df1 ./tools/hooks/03-fix-gtk-immodules-cache.sh
|
||||||
|
76b8539898c19f12f9f1ef26da6b1514cb44dfd2b79f34ae81f2494259a763d6 ./tools/hooks/04-fix-gdk-pixbuf-glib2.0-shadow.sh
|
||||||
|
b0cb9c6e8ca58353afc5643ba184fc24a501c6f091c354b720ecce736171a951 ./tools/hooks/05-fix-non-reproducible-files.sh
|
||||||
|
72e4e673e75466fddd5f3964e3db3f941e0d40214ec37f167fe425b33e60e1c0 ./tools/mksquashfs-excludes
|
||||||
|
390fdc4c915aeed379196335e672d6a9af6677e6d675093f8855c85953aae246 ./tools/packages/fontconfig-config_2.11.0-6.7.0tails4_all.deb
|
||||||
|
892a2c0b4f8e4874161165cb253755b3bd695ce238b30c3b8e5447ff269c2740 ./tools/packages/fontconfig_2.11.0-6.7.0tails4_amd64.deb
|
||||||
|
01db265c90f351367c73cd7ecedeca2f490374579320c5240feecdc70040917e ./tools/packages/gir1.2-gtk-3.0_3.22.11-1.0tails1_amd64.deb
|
||||||
|
4e49e6161a93424700ced09d0225574d3f6dd406ba9f9e14c36a50e870faab16 ./tools/packages/gtk-update-icon-cache_3.22.11-1.0tails1_amd64.deb
|
||||||
|
db1d9dcd6d0c9587136c5a65419ee9eaa7a8a20c163dd2718cd826056a893819 ./tools/packages/initramfs-tools-core_0.130.0tails1_all.deb
|
||||||
|
36c39407b505015a80e666726018edad37211d594b862238475d59d3de4e0da9 ./tools/packages/initramfs-tools_0.130.0tails1_all.deb
|
||||||
|
93e954744ec11e1d6837a792e26cc93b88f0735f7184337c4e65babca65503ab ./tools/packages/ksk-tools-0.1.0coen_amd64.deb
|
||||||
|
2080347093bc714b92d2f02e9c19e51ca23804776c2b52958c25630330b25f1d ./tools/packages/ksk-xfce-custom-0.1.0coen_amd64.deb
|
||||||
|
933adbbead4fd8ced095b5f43fd82b092298aaf95436d8b051b2ee9a4abee917 ./tools/packages/libfontconfig1_2.11.0-6.7.0tails4_amd64.deb
|
||||||
|
a8946b779ccf305da8dadefa9d7d9402ccfe756246dd70a251e4375076a83648 ./tools/packages/libgtk-3-0_3.22.11-1.0tails1_amd64.deb
|
||||||
|
605e3c77857d9c55932c7f497f56c70d46af65af59600e5507f42aea3832a848 ./tools/packages/libgtk-3-common_3.22.11-1.0tails1_all.deb
|
||||||
|
a0ae2652c5ca8461752f17ab22aa385c588481351b7b4aeb199a3d23d6479c34 ./tools/packages/libgtk2.0-0_2.24.31-2.0tails1_amd64.deb
|
||||||
|
0862890d70bafeb6b4a7a1c1da05c90569e0147522d6526fad6d146d6335b79f ./tools/packages/libgtk2.0-common_2.24.31-2.0tails1_all.deb
|
||||||
|
5c7ab880233139bc213d2ef214dc6c433eac488eaa51f8d59c4eb791fa777293 ./tools/squashfs-tools_4.3-3.0tails4_amd64.deb
|
||||||
|
eb66b37b4c0a81285e0c2fa18787b942fdee63a4d1c25cb4343ab50c03d1524a ./variables.sh
|
170
create-iso.sh
Executable file
170
create-iso.sh
Executable file
@ -0,0 +1,170 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Main script for ISO image creation
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
source ./variables.sh
|
||||||
|
|
||||||
|
# Creating a working directory
|
||||||
|
mkdir -p $WD
|
||||||
|
|
||||||
|
# Setting up the base Debian rootfs environment
|
||||||
|
debuerreotype-init $WD/chroot $DIST $DATE --arch=$ARCH
|
||||||
|
# root without password
|
||||||
|
debuerreotype-chroot $WD/chroot passwd -d root
|
||||||
|
# Installing all needed packages for COEN
|
||||||
|
debuerreotype-apt-get $WD/chroot update
|
||||||
|
debuerreotype-chroot $WD/chroot DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Check-Valid-Until=false install \
|
||||||
|
--no-install-recommends --yes \
|
||||||
|
linux-image-amd64 live-boot systemd-sysv \
|
||||||
|
syslinux syslinux-common isolinux
|
||||||
|
debuerreotype-chroot $WD/chroot DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Check-Valid-Until=false install \
|
||||||
|
--no-install-recommends --yes \
|
||||||
|
iproute2 ifupdown pciutils usbutils dosfstools eject exfat-utils \
|
||||||
|
vim links2 xpdf cups cups-bsd enscript libbsd-dev tree openssl less iputils-ping \
|
||||||
|
xserver-xorg-core xserver-xorg xfce4 xfce4-terminal xfce4-panel lightdm system-config-printer \
|
||||||
|
xterm gvfs thunar-volman xfce4-power-manager
|
||||||
|
debuerreotype-apt-get $WD/chroot --yes --purge autoremove
|
||||||
|
debuerreotype-apt-get $WD/chroot --yes clean
|
||||||
|
|
||||||
|
# Applying hooks
|
||||||
|
for FIXES in $HOOK_DIR/*
|
||||||
|
do
|
||||||
|
$FIXES
|
||||||
|
done
|
||||||
|
|
||||||
|
# Setting network
|
||||||
|
echo "coen" > $WD/chroot/etc/hostname
|
||||||
|
|
||||||
|
cat > $WD/chroot/etc/hosts << EOF
|
||||||
|
127.0.0.1 localhost coen
|
||||||
|
192.168.0.2 hsm
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > $WD/chroot/etc/network/interfaces.d/coen-network << EOF
|
||||||
|
auto lo
|
||||||
|
iface lo inet loopback
|
||||||
|
|
||||||
|
auto eth0
|
||||||
|
iface eth0 inet static
|
||||||
|
address 192.168.0.1
|
||||||
|
netmask 255.255.255.0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Profile in .bashrc to work with xfce terminal
|
||||||
|
echo "export PATH=:/opt/icann/bin:/opt/Keyper/bin:\$PATH" >> $WD/chroot/root/.bashrc
|
||||||
|
# ls with color
|
||||||
|
sed -i -r -e '9s/^#//' \
|
||||||
|
-e '10s/^#//' \
|
||||||
|
-e '11s/^#//' \
|
||||||
|
$WD/chroot/root/.bashrc
|
||||||
|
|
||||||
|
# Configure autologin
|
||||||
|
for NUMBER in $(seq 1 6)
|
||||||
|
do
|
||||||
|
mkdir -p $WD/chroot/etc/systemd/system/getty@tty${NUMBER}.service.d
|
||||||
|
|
||||||
|
cat > $WD/chroot/etc/systemd/system/getty@tty${NUMBER}.service.d/live-config_autologin.conf << EOF
|
||||||
|
[Service]
|
||||||
|
Type=idle
|
||||||
|
ExecStart=
|
||||||
|
ExecStart=-/sbin/agetty --autologin root --noclear %I \$TERM
|
||||||
|
TTYVTDisallocate=no
|
||||||
|
EOF
|
||||||
|
done
|
||||||
|
|
||||||
|
# XFCE root auto login
|
||||||
|
sed -i -r -e "s|^#.*autologin-user=.*\$|autologin-user=root|" \
|
||||||
|
-e "s|^#.*autologin-user-timeout=.*\$|autologin-user-timeout=0|" \
|
||||||
|
$WD/chroot/etc/lightdm/lightdm.conf
|
||||||
|
|
||||||
|
sed -i --regexp-extended \
|
||||||
|
'11s/.*/#&/' \
|
||||||
|
$WD/chroot/etc/pam.d/lightdm-autologin
|
||||||
|
|
||||||
|
# Disabling lastlog since autologin is enabled
|
||||||
|
sed -i '/^[^#].*pam_lastlog\.so/s/^/# /' $WD/chroot/etc/pam.d/login
|
||||||
|
|
||||||
|
# Making sure that the xscreensaver is off
|
||||||
|
rm -f $WD/chroot/etc/xdg/autostart/xscreensaver.desktop
|
||||||
|
|
||||||
|
# Defining mount point /media/ for HSMFD, HSMFD1 and KSRFD
|
||||||
|
cat > $WD/chroot/etc/udev/rules.d/99-udisks2.rules << EOF
|
||||||
|
# UDISKS_FILESYSTEM_SHARED
|
||||||
|
# ==1: mount filesystem to a shared directory (/media/VolumeName)
|
||||||
|
# ==0: mount filesystem to a private directory (/run/media/USER/VolumeName)
|
||||||
|
# See udisks(8)
|
||||||
|
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Creating boot directories
|
||||||
|
mkdir -p $WD/image/live
|
||||||
|
mkdir -p $WD/image/isolinux
|
||||||
|
|
||||||
|
# Copying bootloader
|
||||||
|
cp -p $WD/chroot/boot/vmlinuz-* $WD/image/live/vmlinuz
|
||||||
|
cp -p $WD/chroot/boot/initrd.img-* $WD/image/live/initrd.img
|
||||||
|
|
||||||
|
# Creating the isolinux bootloader
|
||||||
|
cat > $WD/image/isolinux/isolinux.cfg << EOF
|
||||||
|
UI menu.c32
|
||||||
|
|
||||||
|
prompt 0
|
||||||
|
menu title coen-${RELEASE}
|
||||||
|
|
||||||
|
timeout 1
|
||||||
|
|
||||||
|
label coen-${RELEASE} Live amd64
|
||||||
|
menu label ^coen-${RELEASE} amd64
|
||||||
|
menu default
|
||||||
|
kernel /live/vmlinuz
|
||||||
|
append initrd=/live/initrd.img boot=live locales=en_US.UTF-8 keymap=us language=us net.ifnames=0 timezone=Etc/UTC live-media=removable nopersistence selinux=0 STATICIP=frommedia modprobe.blacklist=pcspkr,hci_uart,btintel,btqca,btbcm,bluetooth,snd_hda_intel,snd_hda_codec_realtek,snd_soc_skl,snd_soc_skl_ipc,snd_soc_sst_ipc,snd_soc_sst_dsp,snd_hda_ext_core,snd_soc_sst_match,snd_soc_core,snd_compress,snd_hda_core,snd_pcm,snd_timer,snd,soundcore
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Coping files for ISO booting
|
||||||
|
cp -p $WD/chroot/usr/lib/ISOLINUX/isolinux.bin $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/ISOLINUX/isohdpfx.bin $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/menu.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/hdt.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/ldlinux.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/libutil.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/libmenu.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/libcom32.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/lib/syslinux/modules/bios/libgpl.c32 $WD/image/isolinux/
|
||||||
|
cp -p $WD/chroot/usr/share/misc/pci.ids $WD/image/isolinux/
|
||||||
|
|
||||||
|
# Fixing dates to SOURCE_DATE_EPOCH
|
||||||
|
debuerreotype-fixup $WD/chroot
|
||||||
|
|
||||||
|
# Fixing main folder timestamps to SOURCE_DATE_EPOCH
|
||||||
|
find "$WD/" -exec touch --no-dereference --date="@$SOURCE_DATE_EPOCH" '{}' +
|
||||||
|
|
||||||
|
# Compressing the chroot environment into a squashfs
|
||||||
|
mksquashfs $WD/chroot/ $WD/image/live/filesystem.squashfs -comp xz -Xbcj x86 -b 1024K -Xdict-size 1024K -no-exports -processors 1 -no-fragments -wildcards -ef $TOOL_DIR/mksquashfs-excludes
|
||||||
|
|
||||||
|
# Setting permissions for squashfs.img
|
||||||
|
chmod 644 $WD/image/live/filesystem.squashfs
|
||||||
|
|
||||||
|
# Fixing squashfs folder timestamps to SOURCE_DATE_EPOCH
|
||||||
|
find "$WD/image/" -exec touch --no-dereference --date="@$SOURCE_DATE_EPOCH" '{}' +
|
||||||
|
|
||||||
|
# Creating the iso
|
||||||
|
xorriso -outdev $ISONAME -volid COEN \
|
||||||
|
-map $WD/image/ / -chmod 0755 / -- -boot_image isolinux dir=/isolinux \
|
||||||
|
-boot_image isolinux system_area=$WD/chroot/usr/lib/ISOLINUX/isohdpfx.bin \
|
||||||
|
-boot_image isolinux partition_entry=gpt_basdat
|
||||||
|
|
||||||
|
echo "Calculating SHA-256 HASH of the $ISONAME"
|
||||||
|
NEWHASH=$(sha256sum < "${ISONAME}")
|
||||||
|
if [ "$NEWHASH" != "$SHASUM" ]
|
||||||
|
then
|
||||||
|
echo "ERROR: SHA-256 hashes mismatched reproduction failed"
|
||||||
|
echo "Please send us an issue report: https://github.com/iana-org/coen"
|
||||||
|
else
|
||||||
|
echo "Successfully reproduced coen-${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# END
|
BIN
tools/debuerreotype_0.7-1_all.deb
Normal file
BIN
tools/debuerreotype_0.7-1_all.deb
Normal file
Binary file not shown.
29
tools/hooks/00-install-ksk-packages.sh
Executable file
29
tools/hooks/00-install-ksk-packages.sh
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Installs KSK software and XFCE customisation from Debian packages
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
PKG1="ksk-tools-0.1.0coen_amd64.deb"
|
||||||
|
SHAPKG1="93e954744ec11e1d6837a792e26cc93b88f0735f7184337c4e65babca65503ab -"
|
||||||
|
|
||||||
|
PKG2="ksk-xfce-custom-0.1.0coen_amd64.deb"
|
||||||
|
SHAPKG2="2080347093bc714b92d2f02e9c19e51ca23804776c2b52958c25630330b25f1d -"
|
||||||
|
|
||||||
|
for PKG in "${PKG1} ${SHAPKG1}" "${PKG2} ${SHAPKG2}"
|
||||||
|
do
|
||||||
|
set -- $PKG # parses variable PKG $1 name and $2 hash and $3 "-"
|
||||||
|
cp $PACKAGE_DIR/$1 $WD/chroot/tmp
|
||||||
|
echo "Calculating SHA-256 HASH of the $1"
|
||||||
|
HASH=$(sha256sum < "$WD/chroot/tmp/$1")
|
||||||
|
if [ "$HASH" != "$2 $3" ]
|
||||||
|
then
|
||||||
|
echo "ERROR: SHA-256 hashes mismatched"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
debuerreotype-chroot $WD/chroot dpkg -i /tmp/$1
|
||||||
|
rm -f $WD/chroot/tmp/$1
|
||||||
|
done
|
||||||
|
|
||||||
|
# END
|
35
tools/hooks/01-fix-fontconfig-cache.sh
Executable file
35
tools/hooks/01-fix-fontconfig-cache.sh
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# fontconfig generates non-reproducible cache files under
|
||||||
|
# /var/cache/fontconfig
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864082
|
||||||
|
# The fontconfig packages from tails fixed the above
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
PKG1="fontconfig-config_2.11.0-6.7.0tails4_all.deb"
|
||||||
|
SHAPKG1="390fdc4c915aeed379196335e672d6a9af6677e6d675093f8855c85953aae246 -"
|
||||||
|
|
||||||
|
PKG2="libfontconfig1_2.11.0-6.7.0tails4_amd64.deb"
|
||||||
|
SHAPKG2="933adbbead4fd8ced095b5f43fd82b092298aaf95436d8b051b2ee9a4abee917 -"
|
||||||
|
|
||||||
|
PKG3="fontconfig_2.11.0-6.7.0tails4_amd64.deb"
|
||||||
|
SHAPKG3="892a2c0b4f8e4874161165cb253755b3bd695ce238b30c3b8e5447ff269c2740 -"
|
||||||
|
|
||||||
|
for PKG in "${PKG1} ${SHAPKG1}" "${PKG2} ${SHAPKG2}" "${PKG3} ${SHAPKG3}"
|
||||||
|
do
|
||||||
|
set -- $PKG # parses variable PKG $1 name and $2 hash and $3 "-"
|
||||||
|
cp $PACKAGE_DIR/$1 $WD/chroot/tmp
|
||||||
|
echo "Calculating SHA-256 HASH of the $1"
|
||||||
|
HASH=$(sha256sum < "$WD/chroot/tmp/$1")
|
||||||
|
if [ "$HASH" != "$2 $3" ]
|
||||||
|
then
|
||||||
|
echo "ERROR: SHA-256 hashes mismatched"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
debuerreotype-chroot $WD/chroot dpkg -i /tmp/$1
|
||||||
|
rm -f $WD/chroot/tmp/$1
|
||||||
|
done
|
||||||
|
|
||||||
|
# END
|
31
tools/hooks/02-fix-initramfs-tools.sh
Executable file
31
tools/hooks/02-fix-initramfs-tools.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# mkinitramfs generates non-reproducible ramdisk images
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845034
|
||||||
|
# The initramfs-tools packages from tails fixed the above
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
PKG1="initramfs-tools-core_0.130.0tails1_all.deb"
|
||||||
|
SHAPKG1="db1d9dcd6d0c9587136c5a65419ee9eaa7a8a20c163dd2718cd826056a893819 -"
|
||||||
|
|
||||||
|
PKG2="initramfs-tools_0.130.0tails1_all.deb"
|
||||||
|
SHAPKG2="36c39407b505015a80e666726018edad37211d594b862238475d59d3de4e0da9 -"
|
||||||
|
|
||||||
|
for PKG in "${PKG1} ${SHAPKG1}" "${PKG2} ${SHAPKG2}"
|
||||||
|
do
|
||||||
|
set -- $PKG # parses variable PKG $1 name and $2 hash and $3 "-"
|
||||||
|
cp $PACKAGE_DIR/$1 $WD/chroot/tmp
|
||||||
|
echo "Calculating SHA-256 HASH of the $1"
|
||||||
|
HASH=$(sha256sum < "$WD/chroot/tmp/$1")
|
||||||
|
if [ "$HASH" != "$2 $3" ]
|
||||||
|
then
|
||||||
|
echo "ERROR: SHA-256 hashes mismatched"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
debuerreotype-chroot $WD/chroot dpkg -i /tmp/$1
|
||||||
|
rm -f $WD/chroot/tmp/$1
|
||||||
|
done
|
||||||
|
|
||||||
|
# END
|
44
tools/hooks/03-fix-gtk-immodules-cache.sh
Executable file
44
tools/hooks/03-fix-gtk-immodules-cache.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# gtk+2.0 and gtk+3.0 immodules.cache is not reproducible
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872729
|
||||||
|
# and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=875700
|
||||||
|
# The gtk+ packages from tails fixed the above
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
PKG1="libgtk2.0-common_2.24.31-2.0tails1_all.deb"
|
||||||
|
SHAPKG1="0862890d70bafeb6b4a7a1c1da05c90569e0147522d6526fad6d146d6335b79f -"
|
||||||
|
|
||||||
|
PKG2="libgtk2.0-0_2.24.31-2.0tails1_amd64.deb"
|
||||||
|
SHAPKG2="a0ae2652c5ca8461752f17ab22aa385c588481351b7b4aeb199a3d23d6479c34 -"
|
||||||
|
|
||||||
|
PKG3="gir1.2-gtk-3.0_3.22.11-1.0tails1_amd64.deb"
|
||||||
|
SHAPKG3="01db265c90f351367c73cd7ecedeca2f490374579320c5240feecdc70040917e -"
|
||||||
|
|
||||||
|
PKG4="gtk-update-icon-cache_3.22.11-1.0tails1_amd64.deb"
|
||||||
|
SHAPKG4="4e49e6161a93424700ced09d0225574d3f6dd406ba9f9e14c36a50e870faab16 -"
|
||||||
|
|
||||||
|
PKG5="libgtk-3-common_3.22.11-1.0tails1_all.deb"
|
||||||
|
SHAPKG5="605e3c77857d9c55932c7f497f56c70d46af65af59600e5507f42aea3832a848 -"
|
||||||
|
|
||||||
|
PKG6="libgtk-3-0_3.22.11-1.0tails1_amd64.deb"
|
||||||
|
SHAPKG6="a8946b779ccf305da8dadefa9d7d9402ccfe756246dd70a251e4375076a83648 -"
|
||||||
|
|
||||||
|
for PKG in "${PKG1} ${SHAPKG1}" "${PKG2} ${SHAPKG2}" "${PKG3} ${SHAPKG3}" "${PKG4} ${SHAPKG4}" "${PKG5} ${SHAPKG5}" "${PKG6} ${SHAPKG6}"
|
||||||
|
do
|
||||||
|
set -- $PKG # parses variable PKG $1 name and $2 hash and $3 "-"
|
||||||
|
cp $PACKAGE_DIR/$1 $WD/chroot/tmp
|
||||||
|
echo "Calculating SHA-256 HASH of the $1"
|
||||||
|
HASH=$(sha256sum < "$WD/chroot/tmp/$1")
|
||||||
|
if [ "$HASH" != "$2 $3" ]
|
||||||
|
then
|
||||||
|
echo "ERROR: SHA-256 hashes mismatched"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
debuerreotype-chroot $WD/chroot dpkg -i /tmp/$1
|
||||||
|
rm -f $WD/chroot/tmp/$1
|
||||||
|
done
|
||||||
|
|
||||||
|
# END
|
33
tools/hooks/04-fix-gdk-pixbuf-glib2.0-shadow.sh
Executable file
33
tools/hooks/04-fix-gdk-pixbuf-glib2.0-shadow.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# gdk-pixbuf's loaders.cache is not reproducible
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=875704
|
||||||
|
# giomodule.cache is not reproducible
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=873625
|
||||||
|
# The file /etc/shadow is not reproducible
|
||||||
|
# Reference https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=857803
|
||||||
|
# The packages from sid (unstable) fixed the above
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
# Adding sid (unstable) to /etc/apt/sources.list
|
||||||
|
debuerreotype-chroot $WD/chroot sed -i "$ a\deb \
|
||||||
|
http://snapshot.debian.org/archive/debian/$(date --date "$DATE" '+%Y%m%dT%H%M%SZ') \
|
||||||
|
sid main" /etc/apt/sources.list
|
||||||
|
|
||||||
|
# Installing sid (unstable) packages
|
||||||
|
debuerreotype-apt-get $WD/chroot update
|
||||||
|
debuerreotype-chroot $WD/chroot DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Check-Valid-Until=false install \
|
||||||
|
--no-install-recommends --yes -t sid \
|
||||||
|
gir1.2-gdkpixbuf-2.0 libgdk-pixbuf2.0-common libgdk-pixbuf2.0-0 \
|
||||||
|
libglib2.0-0 \
|
||||||
|
login passwd
|
||||||
|
debuerreotype-apt-get $WD/chroot --yes --purge autoremove
|
||||||
|
debuerreotype-apt-get $WD/chroot --yes clean
|
||||||
|
|
||||||
|
# Turning off the shadow passwords
|
||||||
|
debuerreotype-chroot $WD/chroot shadowconfig off
|
||||||
|
debuerreotype-chroot $WD/chroot rm -f /etc/shadow-
|
||||||
|
|
||||||
|
# END
|
21
tools/hooks/05-fix-non-reproducible-files.sh
Executable file
21
tools/hooks/05-fix-non-reproducible-files.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Fixing non-reproducible files
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
# Truncating the snakeoil SSL key pair and deleting the symbolic link generated
|
||||||
|
# by ssl-cert because is not reproducible
|
||||||
|
|
||||||
|
debuerreotype-chroot $WD/chroot truncate -s 0 /etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
|
debuerreotype-chroot $WD/chroot truncate -s 0 /etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
debuerreotype-chroot $WD/chroot find "/etc/ssl/certs" -lname "ssl-cert-snakeoil.pem" -exec rm -f '{}' +
|
||||||
|
|
||||||
|
# Truncating not reproducible file
|
||||||
|
debuerreotype-chroot $WD/chroot truncate -s 0 /etc/machine-id
|
||||||
|
|
||||||
|
# Removing python compiled bytecode
|
||||||
|
debuerreotype-chroot $WD/chroot find "/usr" -name "*.pyc" -exec rm -f '{}' +
|
||||||
|
|
||||||
|
# END
|
10
tools/mksquashfs-excludes
Normal file
10
tools/mksquashfs-excludes
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
boot/*
|
||||||
|
tmp/*
|
||||||
|
var/lib/apt/lists/*
|
||||||
|
usr/share/doc/*
|
||||||
|
usr/share/icons/*/.icon-theme.cache
|
||||||
|
usr/share/icons/*/icon-theme.cache
|
||||||
|
var/cache/debconf/*
|
||||||
|
var/lib/dpkg/info/*.md5sums
|
||||||
|
var/lib/systemd/catalog/database
|
||||||
|
var/log/*
|
BIN
tools/packages/fontconfig-config_2.11.0-6.7.0tails4_all.deb
Normal file
BIN
tools/packages/fontconfig-config_2.11.0-6.7.0tails4_all.deb
Normal file
Binary file not shown.
BIN
tools/packages/fontconfig_2.11.0-6.7.0tails4_amd64.deb
Normal file
BIN
tools/packages/fontconfig_2.11.0-6.7.0tails4_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/gir1.2-gtk-3.0_3.22.11-1.0tails1_amd64.deb
Normal file
BIN
tools/packages/gir1.2-gtk-3.0_3.22.11-1.0tails1_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/gtk-update-icon-cache_3.22.11-1.0tails1_amd64.deb
Normal file
BIN
tools/packages/gtk-update-icon-cache_3.22.11-1.0tails1_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/initramfs-tools-core_0.130.0tails1_all.deb
Normal file
BIN
tools/packages/initramfs-tools-core_0.130.0tails1_all.deb
Normal file
Binary file not shown.
BIN
tools/packages/initramfs-tools_0.130.0tails1_all.deb
Normal file
BIN
tools/packages/initramfs-tools_0.130.0tails1_all.deb
Normal file
Binary file not shown.
BIN
tools/packages/ksk-tools-0.1.0coen_amd64.deb
Normal file
BIN
tools/packages/ksk-tools-0.1.0coen_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/ksk-xfce-custom-0.1.0coen_amd64.deb
Normal file
BIN
tools/packages/ksk-xfce-custom-0.1.0coen_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/libfontconfig1_2.11.0-6.7.0tails4_amd64.deb
Normal file
BIN
tools/packages/libfontconfig1_2.11.0-6.7.0tails4_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/libgtk-3-0_3.22.11-1.0tails1_amd64.deb
Normal file
BIN
tools/packages/libgtk-3-0_3.22.11-1.0tails1_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/libgtk-3-common_3.22.11-1.0tails1_all.deb
Normal file
BIN
tools/packages/libgtk-3-common_3.22.11-1.0tails1_all.deb
Normal file
Binary file not shown.
BIN
tools/packages/libgtk2.0-0_2.24.31-2.0tails1_amd64.deb
Normal file
BIN
tools/packages/libgtk2.0-0_2.24.31-2.0tails1_amd64.deb
Normal file
Binary file not shown.
BIN
tools/packages/libgtk2.0-common_2.24.31-2.0tails1_all.deb
Normal file
BIN
tools/packages/libgtk2.0-common_2.24.31-2.0tails1_all.deb
Normal file
Binary file not shown.
BIN
tools/squashfs-tools_4.3-3.0tails4_amd64.deb
Normal file
BIN
tools/squashfs-tools_4.3-3.0tails4_amd64.deb
Normal file
Binary file not shown.
19
variables.sh
Executable file
19
variables.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Configuration for creation of the ISO image. This script is executed by
|
||||||
|
# create-iso.sh
|
||||||
|
|
||||||
|
set -x # Print each command before executing it
|
||||||
|
set -e # Exit immediately should a command fail
|
||||||
|
set -u # Treat unset variables as an error and exit immediately
|
||||||
|
|
||||||
|
export RELEASE=0.4.0 # Release version number
|
||||||
|
export DATE=20180311 # Timestamp to use for version packages (`date +%Y%m%d`)
|
||||||
|
export DIST=stretch # Debian distribution to base image on
|
||||||
|
export ARCH=amd64 # Target architecture
|
||||||
|
export SHASUM="8105b885b176741d25ef9d391c6a302aed3f6c916093a621a865cb90d560774f -" # ISO image SHA-256
|
||||||
|
export SOURCE_DATE_EPOCH="$(date --utc --date="$DATE" +%s)" # defined by reproducible-builds.org
|
||||||
|
export WD=/opt/coen-${RELEASE} # Working directory to create the image
|
||||||
|
export ISONAME=${WD}-${ARCH}.iso # Final name of the ISO image
|
||||||
|
export TOOL_DIR=/tools # Location to install the tools
|
||||||
|
export HOOK_DIR=$TOOL_DIR/hooks # Hooks
|
||||||
|
export PACKAGE_DIR=$TOOL_DIR/packages # Packages
|
Loading…
x
Reference in New Issue
Block a user