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
142147DEBIAN_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"
160198fi
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
170218EOF
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
181234EOF
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
185243EOF
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
190252EOF
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[*]}
195261EOF
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[*]}
200268EOF
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
204275EOF
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[*]}
208284EOF
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
212291fi
213292
214293if [[ -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
228321deb [signed-by=$keyfile ] https://packages.sury.org/php/ $CODENAME main
229322EOF
230-
323+ fi
231324 cat > /etc/apt/preferences.d/php-sury.pref << EOF
232325Package: *
233326Pin: origin packages.sury.org
@@ -295,13 +388,15 @@ Pin-Priority: 550
295388
296389EOF
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
305400Package: php-mysql
306401Version: $PKG_V
307402Section: custom
@@ -313,29 +408,16 @@ Installed-Size: 1024
313408Maintainer: Jeremy Davis <jeremy@turnkeylinux.org>
314409Description: Dummy Package to allow Adminer to install cleanly without Debian php-mysql package.
315410EOF
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
0 commit comments