# 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 <