Skip to content

Commit 2a265ee

Browse files
authored
Merge pull request #328 from JedMeister/trixie-apt-2
Trixie apt setup - use deb822 format
2 parents c60775c + 624bc2e commit 2a265ee

10 files changed

Lines changed: 426 additions & 209 deletions

conf/bootstrap_apt

Lines changed: 165 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
# - BACKPORTS <optional>:
1313
# - set to enable Debian backports repo
1414
# - PHP_VERSION <optional>:
15-
# - set to desired PHP version from Sury PHP repo
15+
# - set to desired PHP version from Sury PHP repo - e.g. '8.5'
16+
# - if 'default' or equal to the default PHP version in Debian, Sury repo
17+
# will be created, but disabled by default
1618
# - PHP_EXTRA_PINS <optional>:
1719
# - space separated list of additional Sury php pkgs to pin 500
1820
# - APT_PROXY_OVERRIDE <optional>:
@@ -60,18 +62,21 @@ case $CODENAME in
6062
MIRROR_URL=http://deb.debian.org/debian
6163
SEC_MIRROR=http://security.debian.org/
6264
KEY_CODENAME=$CODENAME
63-
CONTRIB="contrib"
64-
NON_FREE="non-free"
65+
MAIN=(main)
66+
CONTRIB=(contrib)
67+
NON_FREE=(non-free)
6568
;;&
6669
bookworm|trixie|forky)
6770
SEC_MIRROR="${SEC_MIRROR}debian-security"
71+
MAIN=(main non-free-firmware)
6872
;;
6973
# Note - only Ubuntu LTS
7074
focal|jammy|noble)
7175
MIRROR_URL=http://archive.ubuntu.com/ubuntu
7276
SEC_MIRROR=$MIRROR_URL
73-
CONTRIB="universe"
74-
NON_FREE="restricted multiverse"
77+
MAIN=(main)
78+
CONTRIB=(universe)
79+
NON_FREE=(restricted multiverse)
7580
;;&
7681
focal)
7782
KEY_CODENAME="bullseye"
@@ -142,92 +147,180 @@ fi
142147
DEBIAN_PHP_V=$(apt-cache policy php \
143148
| sed -n "\|Candidate:|s|.*:\([0-9]\.[0-9]*\)+.*|\1|p")
144149

145-
if [[ -z "$NO_TURNKEY_APT_REPO" ]]; then
146-
# keys are provided as ascii armoured for transparency; but secure apt requires
147-
# gpg keyring files
150+
tkl_apt_repo_enabled="yes"
151+
tkl_apt_testing_enabled="no"
152+
debian_backports_enabled="no"
153+
sury_php_enabled="no"
154+
debian_components=("${MAIN[@]}")
155+
if [[ -n "$NONFREE" ]]; then
156+
debian_components+=("${CONTRIB[@]}" "${NON_FREE[@]}")
157+
fi
158+
if [[ -n "$TKL_TESTING" ]]; then
159+
# note that if 'NO_TURNKEY_APT_REPO' is set, this will be overridden
160+
tkl_apt_testing_enabled="yes"
161+
fi
162+
if [[ -n "$BACKPORTS" ]]; then
163+
debian_backports_enabled="yes"
164+
fi
165+
if [[ -n "$PHP_VERSION" ]] \
166+
&& [[ "$PHP_VERSION" != "default" ]] \
167+
&& [[ "$PHP_VERSION" != "$DEBIAN_PHP_V" ]]; then
168+
sury_php_enabled="yes"
169+
fi
170+
if [[ -n "$NO_TURNKEY_APT_REPO" ]]; then
171+
tkl_apt_repo_enabled="no"
172+
tkl_apt_testing_enabled="no"
173+
else
148174
key_dir=/usr/share/keyrings
175+
# As of TKL v19.x apt repos use a single gpg keyring that is generated from
176+
# the 3 separate raw ascii armored keys
177+
#
178+
# For prior releases, each repo had a separate gpg key generated from each
179+
# of the sepaate asc keys
149180
repos=(main security testing)
150181
for repo in "${repos[@]}"; do
151182
full_path=$key_dir/tkl-$CODENAME-$repo
152-
keyring=$full_path.gpg
153183
keyfile=$full_path.asc
154-
gpg --no-default-keyring --keyring "$keyring" --import "$keyfile"
155-
rm "$keyfile"
184+
if [[ $deb_ver -ge 13 ]]; then
185+
keyring=$key_dir/tkl-archive-keyring.gpg
186+
else
187+
keyring=$full_path.gpg
188+
fi
189+
# by default gpg generates "GPG keybox database version 1" files
190+
# apt in Trixie requires a "PGP/GPG key public ring (v4)"
191+
gpg --no-default-keyring --keyring gnupg-ring:"$keyring" --import "$keyfile"
192+
chmod a+r "$keyring"
156193
done
157194
# ensure that gpg-agent is killed after processing keys
158195
kill -9 "$(pidof gpg-agent)" || true
196+
rm -rf "$key_dir"/*~
159197
rm -rf "$HOME/.gnupg"
160198
fi
161199

162-
cat > $SOURCES_LIST/sources.list <<EOF
163-
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-main.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME main
164-
165-
deb $MIRROR_URL $CODENAME main
166-
EOF
167-
if [[ $deb_ver -ge 12 ]]; then
168-
cat >> $SOURCES_LIST/sources.list <<EOF
169-
deb $MIRROR_URL $CODENAME non-free-firmware
200+
if [[ $deb_ver -ge 13 ]]; then
201+
# As of TKL v19.x apt sources files are deb822 style '.sources' files
202+
203+
# Main repos
204+
cat > $SOURCES_LIST/sources.sources <<EOF
205+
Types: deb
206+
URIs: http://archive.turnkeylinux.org/debian
207+
Suites: $KEY_CODENAME
208+
Components: main
209+
Enabled: $tkl_apt_repo_enabled
210+
Signed-By: /usr/share/keyrings/tkl-archive-keyring.gpg
211+
212+
Types: deb
213+
URIs: $MIRROR_URL
214+
Suites: $CODENAME
215+
Components: ${debian_components[*]}
216+
Enabled: yes
217+
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
170218
EOF
171-
fi
172-
cat >> $SOURCES_LIST/sources.list <<EOF
173-
deb $MIRROR_URL $CODENAME $CONTRIB
174-
#deb $MIRROR_URL $CODENAME $NON_FREE
175-
EOF
176-
177-
cat > $SOURCES_LIST/security.sources.list <<EOF
178-
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-security.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME-security main
179-
180-
deb $SEC_MIRROR $sec_repo main
219+
# Security repos
220+
cat > $SOURCES_LIST/security.sources.sources <<EOF
221+
Types: deb
222+
URIs: http://archive.turnkeylinux.org/debian
223+
Suites: $KEY_CODENAME-security
224+
Components: main
225+
Enabled: $tkl_apt_repo_enabled
226+
Signed-By: /usr/share/keyrings/tkl-archive-keyring.gpg
227+
228+
Types: deb
229+
URIs: $SEC_MIRROR
230+
Suites: $sec_repo
231+
Components: ${debian_components[*]}
232+
Enabled: yes
233+
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
181234
EOF
182-
if [[ $deb_ver -ge 12 ]]; then
183-
cat >> $SOURCES_LIST/security.sources.list <<EOF
184-
deb $SEC_MIRROR $sec_repo non-free-firmware
235+
# Debian backports repo
236+
cat > $SOURCES_LIST/debian-backports.sources <<EOF
237+
Types: deb
238+
URIs: http://deb.debian.org/debian
239+
Suites: $CODENAME-backports
240+
Components: main
241+
Enabled: $debian_backports_enabled
242+
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
185243
EOF
186-
fi
187-
cat >> $SOURCES_LIST/security.sources.list <<EOF
188-
deb $SEC_MIRROR $sec_repo $CONTRIB
189-
#deb $SEC_MIRROR $sec_repo $NON_FREE
244+
# TurnKey testing repo
245+
cat > $SOURCES_LIST/turnkey-testing.sources <<EOF
246+
Types: deb
247+
URIs: http://archive.turnkeylinux.org/debian
248+
Suites: $KEY_CODENAME-testing
249+
Components: main
250+
Enabled: $tkl_apt_testing_enabled
251+
Signed-By: /usr/share/keyrings/tkl-archive-keyring.gpg
190252
EOF
253+
else
254+
# legacy sources.list files
255+
cat > $SOURCES_LIST/sources.list <<EOF
256+
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-main.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME main
191257
192-
TKL_TESTING_LIST=$SOURCES_LIST/turnkey-testing.list
193-
cat > $TKL_TESTING_LIST.disabled <<EOF
194-
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-testing.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME-testing main
258+
deb $MIRROR_URL $CODENAME ${MAIN[*]}
259+
deb $MIRROR_URL $CODENAME ${CONTRIB[*]}
260+
#deb $MIRROR_URL $CODENAME ${NON_FREE[*]}
195261
EOF
262+
cat > $SOURCES_LIST/security.sources.list <<EOF
263+
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-security.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME-security main
196264
197-
DEB_BACKPORT_LIST=$SOURCES_LIST/debian-backports.list
198-
cat > $DEB_BACKPORT_LIST.disabled <<EOF
199-
deb $MIRROR_URL $CODENAME-backports main
265+
deb $SEC_MIRROR $sec_repo ${MAIN[*]}
266+
deb $MIRROR_URL $CODENAME ${CONTRIB[*]}
267+
#deb $MIRROR_URL $CODENAME ${NON_FREE[*]}
200268
EOF
201-
if [[ $deb_ver -ge 12 ]]; then
202-
cat >> $DEB_BACKPORT_LIST.disabled <<EOF
203-
deb $MIRROR_URL $CODENAME-backports non-free-firmware
269+
TKL_TESTING_LIST=$SOURCES_LIST/turnkey-testing.list
270+
if [[ -z "$TKL_TESTING" ]]; then
271+
TKL_TESTING_LIST=$TKL_TESTING_LIST.disabled
272+
fi
273+
cat > $SOURCES_LIST/$TKL_TESTING_LIST <<EOF
274+
deb [signed-by=$key_dir/tkl-$KEY_CODENAME-testing.gpg] http://archive.turnkeylinux.org/debian $KEY_CODENAME-testing main
204275
EOF
205-
fi
206-
cat >> $DEB_BACKPORT_LIST.disabled <<EOF
207-
#deb $MIRROR_URL $CODENAME-backports non-free
276+
DEB_BACKPORT_LIST=$SOURCES_LIST/debian-backports.list
277+
if [[ -z "$BACKPORTS" ]]; then
278+
DEB_BACKPORT_LIST=$DEB_BACKPORT_LIST.disabled
279+
fi
280+
cat > $DEB_BACKPORT_LIST <<EOF
281+
deb $MIRROR_URL $CODENAME-backports ${MAIN[*]}
282+
deb $MIRROR_URL $CODENAME-backports ${CONTRIB[*]}
283+
#deb $MIRROR_URL $CODENAME-backports ${NON_FREE[*]}
208284
EOF
209-
210-
if [[ -n "$NO_TURNKEY_APT_REPO" ]]; then
211-
find $SOURCES_LIST -type f -exec sed -i '/archive.turnkeylinux.org/ s/^/#/g' {} \;
285+
if [[ -n "$NO_TURNKEY_APT_REPO" ]]; then
286+
find $SOURCES_LIST -type f -exec sed -i '/archive.turnkeylinux.org/ s|^|#|g' {} \;
287+
fi
288+
if [[ -n "$NONFREE" ]]; then
289+
find $SOURCES_LIST -type f -exec sed -i '/non-free/ s|^#||g' {} \;
290+
fi
212291
fi
213292

214293
if [[ -n "$PHP_VERSION" ]]; then
215294
# Use 3rd party sury.org repo
216295
# install support for https repo & wget (to download gpg key)
296+
# these packages should already be installed, but just in case
217297
PKGS=(lsb-release ca-certificates wget)
218298
apt-get update --allow-releaseinfo-change
219299
DEBIAN_FRONTEND=noninteractive apt-get install --yes "${PKGS[@]}"
220300

221-
# download keyfile
222301
keyfile=/usr/share/keyrings/debsuryorg-archive-keyring.gpg
223-
wget -O $keyfile https://packages.sury.org/php/apt.gpg
302+
curl --show-error --location --output /tmp/debsuryorg-archive-keyring.deb \
303+
https://packages.sury.org/debsuryorg-archive-keyring.deb
304+
dpkg -i /tmp/debsuryorg-archive-keyring.deb
305+
rm /tmp/debsuryorg-archive-keyring.deb
224306

225-
cat > $SOURCES_LIST/php.list <<EOF
307+
if [[ $deb_ver -ge 13 ]]; then
308+
cat > $SOURCES_LIST/php.sources <<EOF
309+
# DEB.SURY.ORG repo for php
310+
Types: deb
311+
URIs: https://packages.sury.org/php/
312+
Suites: $CODENAME
313+
Components: main
314+
Enabled: $sury_php_enabled
315+
Signed-By: $keyfile
316+
EOF
317+
else
318+
cat > $SOURCES_LIST/php.list <<EOF
226319
# DEB.SURY.ORG repo for php
227320
228321
deb [signed-by=$keyfile] https://packages.sury.org/php/ $CODENAME main
229322
EOF
230-
323+
fi
231324
cat > /etc/apt/preferences.d/php-sury.pref <<EOF
232325
Package: *
233326
Pin: origin packages.sury.org
@@ -295,13 +388,15 @@ Pin-Priority: 550
295388
296389
EOF
297390
done
298-
299-
# create php-mysql package that depends on PHP_VERSION - this allows adminer to install cleanly
300-
PKG=php-mysql
301-
mkdir -p /tmp/$PKG/DEBIAN
302-
PKG_V="2:${PHP_VERSION}"
303-
cd /tmp
304-
cat > /tmp/$PKG/DEBIAN/control <<EOF
391+
if [[ $deb_ver -lt 13 ]]; then
392+
# create php-mysql package that depends on PHP_VERSION
393+
# - this allows adminer to install cleanly (not required for Trixie
394+
# onwards)
395+
PKG=php-mysql
396+
mkdir -p /tmp/$PKG/DEBIAN
397+
PKG_V="2:${PHP_VERSION}"
398+
cd /tmp
399+
cat > /tmp/$PKG/DEBIAN/control <<EOF
305400
Package: php-mysql
306401
Version: $PKG_V
307402
Section: custom
@@ -313,29 +408,16 @@ Installed-Size: 1024
313408
Maintainer: Jeremy Davis <jeremy@turnkeylinux.org>
314409
Description: Dummy Package to allow Adminer to install cleanly without Debian php-mysql package.
315410
EOF
316-
apt-get update
317-
dpkg-deb --build ${PKG}
318-
DEBIAN_FRONTEND=noninteractive apt-get install ./${PKG}.deb -y --allow-downgrades --autoremove
319-
apt-mark hold php-mysql="${PKG_V}"
320-
cd -
321-
rm -rf /tmp/${PKG}*
322-
fi
323-
324-
if [ "$NONFREE" ]; then
325-
sed -i "/non-free/ s|^#||" $SOURCES_LIST/sources.list
326-
sed -i "/non-free/ s|^#||" $SOURCES_LIST/security.sources.list
327-
fi
328-
329-
if [ "$TKL_TESTING" ]; then
330-
mv $TKL_TESTING_LIST.disabled $TKL_TESTING_LIST
331-
fi
332-
333-
if [ "$BACKPORTS" ]; then
334-
mv $DEB_BACKPORT_LIST.disabled $DEB_BACKPORT_LIST
335-
if [ "$BACKPORTS_NONFREE" ]; then
336-
sed -i "/non-free/ s|^#||" $DEB_BACKPORT_LIST
411+
apt-get update
412+
dpkg-deb --build ${PKG}
413+
DEBIAN_FRONTEND=noninteractive apt-get install ./${PKG}.deb -y --allow-downgrades --autoremove
414+
apt-mark hold php-mysql="${PKG_V}"
415+
cd -
416+
rm -rf /tmp/${PKG}*
337417
fi
418+
fi
338419

420+
if [[ "$BACKPORTS" ]]; then
339421
# dynamically add some extra pins as specified in appliance Makefile
340422
[[ -n "$BACKPORTS_PINS" ]] || fatal "BACKPORTS env var set but no BACKPORTS_PINS specified"
341423
for package_name in $BACKPORTS_PINS; do

keys/tkl-trixie-apt.asc

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)