177 lines
6.2 KiB
Markdown
177 lines
6.2 KiB
Markdown
# Releases
|
|
|
|
## Version table
|
|
|
|
| ID | VERSION_ID | VERSION_CODENAME | DEBIAN_VERSION_ID | DEBIAN_CODENAME | DEBIAN_TIMESTAMP | UBUNTU_CODENAME |
|
|
| ------ | ---------- | ---------------- | ----------------- | --------------- | ---------------- | --------------- |
|
|
| Devuan | | | 7 | Wheezy | 20170617T034212Z | |
|
|
| Devuan | 1.0 | Jessie | 8 | Jessie | 20180623T023722Z | |
|
|
| Devuan | 2.0 | ASCII | 9 | Stretch | 20200717T204551Z | |
|
|
| Devuan | 3.0 | Beowulf | 10.4 | Buster | 20230611T103552Z | |
|
|
| Devuan | 4.0 | Chimaera | 11.1 | Bullseye | 20230611T103552Z | |
|
|
| Devuan | 5.0 | Daedalus | 12 | Bookworm | 20231007T150030Z | |
|
|
| Devuan | 6.0 | Excalibur | 13 | Trixie | 20260202T081703Z | Noble |
|
|
| Devuan | 7.0 | Freia | 14 | Forky | 20260202T081703Z | Questing |
|
|
| Devuan | | Ceres | | Sid | 20260202T081703Z | |
|
|
|
|
## Name mismatch
|
|
|
|
Derivative releases have the issue when making franken setups that the
|
|
/etc/os-release doesn't match available upstream VERSION_CODENAME in
|
|
sources.list so that tools like add-apt-repository for ubuntu PPA don't work.
|
|
|
|
/etc/debian/version has forky/sid not sure why its combined like that.
|
|
|
|
/usr/lib/os-release
|
|
Other derivatives add UBUNTU_CODENAME to /etc/os-release but add-apt-repository
|
|
doesn't use that which perhaps it should if ID_LIKE=debian is set. It also
|
|
doesn't use DEB822 or at least have it as a switch since we have the templates
|
|
in /usr/share/python-apt/templates/ although again some testing repos have dual
|
|
names like forky/sid which breaks programmes expecting only one.
|
|
|
|
##
|
|
|
|
jessie caused a name collision with debian, capitalized ascii is already used
|
|
for something and just an annoying choice, they calmed down after that
|
|
(or someone left).
|
|
|
|
## DEBIAN_TIMESTAMP
|
|
|
|
Debian uses http://snapshot.debian.org to provide access to past releases. We
|
|
can use these to fix containers or images to a corresponding date code to
|
|
prevent updates pulling in breaking packages or sometimes debian removes a
|
|
package from testing but not stable of unstable and the snapshot.debian.org
|
|
archive can be used to get the package from an earlier release.
|
|
|
|
Looking up the the package name snapshot.debian.org, finding the version you
|
|
want and taking the timestamp from the url and putting in the DEBIAN_TIMESTAMP
|
|
variable below will give the necessary sources.list entry. Using todays
|
|
timestamp in a snapshot.debian.org url will give you the last available version
|
|
for the VERSION_CODENAME specified.
|
|
|
|
### Signatures
|
|
|
|
APT checks the signature of sources and these expire, so when dealing with
|
|
archived versions we need to cope with this using check-valid-until=no
|
|
|
|
- Get the signing key from the snapshot.debian.org
|
|
- create the sources.list entry
|
|
|
|
### Variables
|
|
|
|
```bash
|
|
URL="snapshot.debian.org"
|
|
VERSION_CODENAME="bookworm"
|
|
DEBIAN_TIMESTAMP="20231007T150030Z"
|
|
KEY_DIR=/usr/share/keyrings/
|
|
KEY=${KEY_DIR}/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.gpg
|
|
sudo mkdir -p ${KEY_DIR}
|
|
KEY_URL="https://${URL}/archive/debian/${DEBIAN_TIMESTAMP}/dists/${VERSION_CODENAME}/Release.gpg"
|
|
sudo curl -fsSL ${KEY_URL} | sudo gpg --dearmor -o ${KEY}
|
|
sudo chmod a+r ${KEY}
|
|
|
|
ARCH=$(dpkg --print-architecture)
|
|
|
|
```
|
|
|
|
### For pre-DEB822
|
|
|
|
```bash
|
|
conf_print_archive_sources() {
|
|
cat <<EOF
|
|
#cat <<-EOF | sudo tee /etc/apt/sources.list-available/docker.list
|
|
# deb [arch=${ARCH} signed-by=${KEY} check-valid-until=no] https://${URL}/archive/debian/${DEBIAN_TIMESTAMP} ${VERSION_CODENAME} stable
|
|
EOF
|
|
}
|
|
conf_print_archive_sources | sudo tee /etc/apt/sources.list.d/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.list
|
|
```
|
|
|
|
### For DEB822
|
|
|
|
```bash
|
|
conf_print_archive_sources() {
|
|
cat <<EOF
|
|
Types: deb
|
|
URIs: https://${URL}/archive/debian/${DEBIAN_TIMESTAMP}
|
|
Suites: "${VERSION_CODENAME}"
|
|
Components: stable
|
|
Check-Valid-Until: no
|
|
Signed-By: "${KEY}"
|
|
EOF
|
|
EOF
|
|
}
|
|
conf_print_archive_sources | sudo tee /etc/apt/sources.list.d/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.sources
|
|
```
|
|
|
|
## Putting it all together.
|
|
|
|
```bash
|
|
conf_print_create_sources() {
|
|
cat <<'EOF'
|
|
#!/bin/bash
|
|
|
|
# Default values
|
|
DEBIAN_TIMESTAMP="${1:-$(date -u +%Y%m%dT%H%M%SZ)}"
|
|
VERSION_CODENAME="${2:-trixie}"
|
|
FILETYPE="${3:-DEB822}"
|
|
|
|
# Show usage if no arguments are provided
|
|
if [ $# -eq 0 ]; then
|
|
cat << EOF
|
|
Usage: $0 [DEBIAN_TIMESTAMP] [VERSION_CODENAME] [FILETYPE]
|
|
|
|
Creates a sources.list entry for Debian archive snapshots.
|
|
|
|
Arguments:
|
|
DEBIAN_TIMESTAMP Timestamp in format YYYYMMDDTHHMMSSZ (default: today)
|
|
VERSION_CODENAME Debian release codename (default: trixie)
|
|
FILETYPE Format: DEB822 or PRE-DEB822 (default: DEB822)
|
|
|
|
Example:
|
|
$0 20231007T150030Z bookworm DEB822
|
|
$0 # Uses defaults: today, trixie, DEB822
|
|
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
URL="snapshot.debian.org"
|
|
KEY_DIR="/usr/share/keyrings"
|
|
ARCH=$(dpkg --print-architecture)
|
|
|
|
KEY="${KEY_DIR}/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.gpg"
|
|
KEY_URL="https://${URL}/archive/debian/${DEBIAN_TIMESTAMP}/dists/${VERSION_CODENAME}/Release.gpg"
|
|
|
|
# Create key directory
|
|
sudo mkdir -p "${KEY_DIR}"
|
|
|
|
# Download and dearmor GPG key
|
|
echo "Downloading GPG key from ${KEY_URL}..."
|
|
sudo curl -fsSL "${KEY_URL}" | sudo gpg --dearmor -o "${KEY}"
|
|
sudo chmod a+r "${KEY}"
|
|
|
|
# Generate sources file
|
|
if [[ "${FILETYPE}" == "DEB822" ]]; then
|
|
FILEPATH="/etc/apt/sources.list.d/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.sources"
|
|
cat << EOF | sudo tee "${FILEPATH}"
|
|
Types: deb
|
|
URIs: https://${URL}/archive/debian/${DEBIAN_TIMESTAMP}
|
|
Suites: "${VERSION_CODENAME}"
|
|
Components: stable
|
|
Check-Valid-Until: no
|
|
Signed-By: "${KEY}"
|
|
EOF
|
|
echo "DEB822 source created at ${FILEPATH}"
|
|
else
|
|
FILEPATH="/etc/apt/sources.list.d/${VERSION_CODENAME}_${DEBIAN_TIMESTAMP}.list"
|
|
cat << EOF | sudo tee "${FILEPATH}"
|
|
deb [arch=${ARCH} signed-by=${KEY} check-valid-until=no] https://${URL}/archive/debian/${DEBIAN_TIMESTAMP} ${VERSION_CODENAME} stable
|
|
EOF
|
|
echo "Legacy .list source created at ${FILEPATH}"
|
|
fi
|
|
|
|
echo "Done. Run 'sudo apt update' to test."
|
|
EOF
|
|
}
|
|
```
|