Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
d6a304e
feat(Trixie)!: upgrade to debian trixie
meteyou Oct 3, 2025
95589c2
feat(Trixie)!: upgrade to debian trixie
meteyou Oct 3, 2025
a4c84e7
feat(Trixie)!: upgrade to debian trixie
meteyou Oct 3, 2025
b9353e4
ci: use custopizer main branch
meteyou Oct 3, 2025
4975f98
fix: use absolute rpios trixie urls
meteyou Oct 3, 2025
b65dacc
fix: remove deprecated package
meteyou Oct 3, 2025
a4499c5
fix: fix download link
meteyou Oct 3, 2025
e412def
Merge branch 'develop' into feat/upgrade-debian-trixie
meteyou Oct 3, 2025
a4b2c1f
fix: removed fixed numpy version
meteyou Oct 3, 2025
6ac6402
Merge remote-tracking branch 'origin/feat/upgrade-debian-trixie' into…
meteyou Oct 3, 2025
9ff69cd
docs: add comments why we use different numpy version and dont instal…
meteyou Oct 4, 2025
43e2113
fix(Crowsnest): move to dev pynest
meteyou Oct 4, 2025
6e5bb4c
fix: fix version number to v3.0.0-alpha
meteyou Oct 4, 2025
aa851e6
fix: fix download urls for raspberry pi lite images
meteyou Oct 25, 2025
f52f5d5
fix: enable ssh by default
KwadFan Oct 27, 2025
fdeda40
fix: disable userconfig.service
KwadFan Oct 27, 2025
e111a17
Revert "fix: disable userconfig.service"
KwadFan Oct 27, 2025
53bd2ea
Revert "fix: enable ssh by default"
KwadFan Oct 27, 2025
0f96523
fix: fix user creation on trixie builds
KwadFan Oct 27, 2025
abfc6c5
fix: enable sshd on trixie images
KwadFan Oct 27, 2025
939fb09
fix: fix typo in func call
KwadFan Oct 27, 2025
8179aa5
fix: fix func get_pw_hash
KwadFan Oct 27, 2025
531c960
refactor: renaming password variable
KwadFan Oct 27, 2025
5167fd5
refactor: use systemctl_if_exists instead of systemctl
KwadFan Oct 27, 2025
fa4491e
refactor: refactor line spacing
KwadFan Oct 27, 2025
42b6782
refactor: delete helper func
KwadFan Oct 27, 2025
5a2bea7
refactor: refactor user setup comment block
KwadFan Oct 27, 2025
9c4b1db
Merge pull request #6 from KwadFan/feat/upgrade-debian-trixie
meteyou Oct 27, 2025
a04f61e
Merge branch 'develop' into feat/upgrade-debian-trixie
meteyou Nov 1, 2025
ed0f974
Merge branch 'develop' into feat/upgrade-debian-trixie
meteyou Nov 15, 2025
95d83b5
Merge remote-tracking branch 'origin/feat/upgrade-debian-trixie' into…
meteyou Nov 15, 2025
9d77f6c
refactor: remove deprecated installation script logic from crowsnest
meteyou Jan 25, 2026
11f3137
fix: add build-essential to dependencies for crowsnest installation
meteyou Jan 25, 2026
2f65df2
fix: replace build-essential with make in the crowsnest deps
meteyou Jan 25, 2026
52fa314
chore: update version to 3.0.0-alpha2
meteyou Feb 14, 2026
c011805
fix: update comment on libatlas-base-dev removal in 50-klipper
meteyou Feb 14, 2026
bbbd353
fix: update comment and handle libatlas-base-dev removal in Trixie
meteyou Feb 21, 2026
02efc2d
Merge remote-tracking branch 'upstream/develop' into feat/upgrade-deb…
meteyou Feb 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ jobs:
scripts: "${{ github.workspace }}/scripts"
config: "${{ github.workspace }}/config.local"
environment: '{ "RELEASE_TAG": "${{ env.RELEASE_TAG }}"}'
custopizer: "main"

- name: "✏ Rename image"
working-directory: ./build
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ jobs:
scripts: "${{ github.workspace }}/scripts"
config: "${{ github.workspace }}/config.local"
environment: '{ "RELEASE_TAG": "${{ env.RELEASE_TAG }}"}'
custopizer: "main"

- name: "✏ Rename image"
working-directory: ./build
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.2.2
3.0.0-alpha2
43 changes: 21 additions & 22 deletions config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
- name: raspberry_pi-armhf-bookworm
- name: raspberry_pi-armhf-trixie
type: raspberry
img_download_url: "https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2025-10-02/2025-10-01-raspios-bookworm-armhf-lite.img.xz.torrent"
img_hash_url: "https://downloads.raspberrypi.com/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2025-10-02/2025-10-01-raspios-bookworm-armhf-lite.img.xz.sha256"
img_download_url: "https://downloads.raspberrypi.org/raspios_lite_armhf_latest.torrent"
img_hash_url: "https://downloads.raspberrypi.org/raspios_lite_armhf_latest.sha256"
env:
ARCH: armhf
IMAGE_ENLARGEROOT: 6000
Expand All @@ -17,10 +17,10 @@
- "pi1-32bit"
- "pi2-32bit"

- name: raspberry_pi-arm64-bookworm
- name: raspberry_pi-arm64-trixie
type: raspberry
img_download_url: "https://downloads.raspberrypi.com/raspios_oldstable_lite_arm64/images/raspios_oldstable_lite_arm64-2025-10-02/2025-10-01-raspios-bookworm-arm64-lite.img.xz.torrent"
img_hash_url: "https://downloads.raspberrypi.com/raspios_oldstable_lite_arm64/images/raspios_oldstable_lite_arm64-2025-10-02/2025-10-01-raspios-bookworm-arm64-lite.img.xz.sha256"
img_download_url: "https://downloads.raspberrypi.org/raspios_lite_arm64_latest.torrent"
img_hash_url: "https://downloads.raspberrypi.org/raspios_lite_arm64_latest.sha256"
env:
ARCH: arm64
IMAGE_ENLARGEROOT: 6000
Expand All @@ -37,10 +37,10 @@
- "pi4-64bit"
- "pi5-64bit"

- name: armbian-orangepi4_lts-bookworm
- name: armbian-orangepi4_lts-trixie
type: armbian
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi4_lts_bookworm.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi4_lts_bookworm.img.xz.sha256"
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi4_lts_trixie.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi4_lts_trixie.img.xz.sha256"
env:
ARCH: arm64
DISTRO: armbian
Expand All @@ -56,10 +56,10 @@
devices:
- "opi4-64bit"

- name: armbian-orangepi3_lts-bookworm
- name: armbian-orangepi3_lts-trixie
type: armbian
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi3_lts_bookworm.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi3_lts_bookworm.img.xz.sha256"
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi3_lts_trixie.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi3_lts_trixie.img.xz.sha256"
env:
ARCH: arm64
DISTRO: armbian
Expand All @@ -75,10 +75,10 @@
devices:
- "opi3-64bit"

- name: armbian-orangepi_zero2-bookworm
- name: armbian-orangepi_zero2-trixie
type: armbian
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero2_bookworm.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero2_bookworm.img.xz.sha256"
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero2_trixie.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero2_trixie.img.xz.sha256"
env:
ARCH: arm64
DISTRO: armbian
Expand All @@ -94,10 +94,10 @@
devices:
- "opizero2-64bit"

- name: armbian-orangepi_zero3-bookworm
- name: armbian-orangepi_zero3-trixie
type: armbian
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero3_bookworm.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero3_bookworm.img.xz.sha256"
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero3_trixie.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-orangepi_zero3_trixie.img.xz.sha256"
env:
ARCH: arm64
DISTRO: armbian
Expand All @@ -113,12 +113,11 @@
devices:
- "opizero3-64bit"

- name: armbian-btt_cb1-bookworm
- name: armbian-btt_cb1-trixie
type: armbian
build_only: True
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-bigtreetech_cb1_bookworm.img.xz
"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-bigtreetech_cb1_bookworm.img.xz.sha256"
img_download_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-bigtreetech_cb1_trixie.img.xz"
img_hash_url: "https://github.com/mainsail-crew/armbian-builds/releases/latest/download/armbian-bigtreetech_cb1_trixie.img.xz.sha256"
env:
ARCH: arm64
DISTRO: armbian
Expand Down
12 changes: 10 additions & 2 deletions modules/generic/50-klipper
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ DEPS=(git \
stm32flash dfu-util libnewlib-arm-none-eabi \
gcc-arm-none-eabi binutils-arm-none-eabi libusb-1.0-0 \
# Input shaper dependencies
python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev \
python3-numpy python3-matplotlib libopenblas-dev \
)

# libatlas-base-dev was merged into libopenblas-dev in Trixie and is no longer available
if [ "$(is_in_apt libatlas-base-dev)" -eq 1 ]; then
DEPS+=(libatlas-base-dev)
fi

########################################
# Install Dependencies #
########################################
Expand Down Expand Up @@ -81,7 +86,10 @@ sudo -u "${BASE_USER}" virtualenv -p python3 "${ENV_DIR}"
echo "Installing Python Dependencies ..."
sudo -u "${BASE_USER}" "${ENV_DIR}"/bin/pip install -r "${SRC_DIR}"/scripts/klippy-requirements.txt
echo "Installing NumPy in Virtualenv"
sudo -u "${BASE_USER}" "${ENV_DIR}"/bin/pip install "numpy<1.26"

# Normally klipper would use "numpy<1.26", but that version does not support
# Python 3.13 which is now in Debian Trixie.
sudo -u "${BASE_USER}" "${ENV_DIR}"/bin/pip install "numpy"

########################################
# Return to saved directory #
Expand Down
25 changes: 4 additions & 21 deletions modules/generic/53-crowsnest
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,9 @@ source /files/00-config
# Configuration #
########################################

REPO="https://github.com/mainsail-crew/crowsnest.git"
DEPS=(git)

INSTALL_SCRIPT="/home/${BASE_USER}/crowsnest/tools/libs/pkglist-generic.sh"
if [[ "$(is_raspbian)" = "1" ]]; then
INSTALL_SCRIPT="/home/${BASE_USER}/crowsnest/tools/libs/pkglist-rpi.sh"
fi
REPO="https://github.com/mryel00/crowsnest-dev.git"
BRANCH="pynest"
Comment on lines +20 to +21
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Step 1: Verify repository and branch existence
echo "=== Checking mryel00/crowsnest-dev repository ==="
REPO_STATUS=$(curl -s -w "\n%{http_code}" "https://api.github.com/repos/mryel00/crowsnest-dev")
HTTP_CODE=$(echo "$REPO_STATUS" | tail -n1)
REPO_DATA=$(echo "$REPO_STATUS" | head -n-1)

echo "HTTP Status: $HTTP_CODE"
if [ "$HTTP_CODE" = "200" ]; then
  echo "Repository exists"
  echo "$REPO_DATA" | jq -r '.description, .archived, .owner.login' 2>/dev/null | head -3
else
  echo "Repository not found or error"
fi

echo ""
echo "=== Checking pynest branch ==="
BRANCH_STATUS=$(curl -s -w "\n%{http_code}" "https://api.github.com/repos/mryel00/crowsnest-dev/branches/pynest")
BRANCH_HTTP_CODE=$(echo "$BRANCH_STATUS" | tail -n1)
BRANCH_DATA=$(echo "$BRANCH_STATUS" | head -n-1)

echo "HTTP Status: $BRANCH_HTTP_CODE"
if [ "$BRANCH_HTTP_CODE" = "200" ]; then
  echo "Branch exists"
  echo "$BRANCH_DATA" | jq -r '.commit.commit.committer.date, .commit.sha' 2>/dev/null
else
  echo "Branch not found or error"
fi

Repository: mainsail-crew/MainsailOS

Length of output: 324


🏁 Script executed:

# Step 2: Check the actual file to confirm the changes
echo "=== Checking actual file content ==="
if [ -f "modules/generic/53-crowsnest" ]; then
  echo "File exists. Checking lines 20-21:"
  sed -n '15,25p' modules/generic/53-crowsnest
else
  echo "File not found at modules/generic/53-crowsnest"
fi

Repository: mainsail-crew/MainsailOS

Length of output: 426


🏁 Script executed:

# Step 3: Get context around line 35 to verify git clone command
echo "=== Checking git clone usage around line 35 ==="
if [ -f "modules/generic/53-crowsnest" ]; then
  sed -n '30,40p' modules/generic/53-crowsnest
fi

Repository: mainsail-crew/MainsailOS

Length of output: 505


Using a personal fork and development branch in production configuration.

The repository was changed from the official mainsail-crew/crowsnest to the personal fork mryel00/crowsnest-dev with the pynest branch. While the repository exists and shows recent activity (last commit Jan 21), using a personal fork for production images presents ongoing risks:

  1. Ownership and continuity: Personal repositories can be transferred, deleted, or become unavailable if ownership changes
  2. Organizational oversight: Less visibility and formal review compared to official organization repositories
  3. Stability: The branch naming (pynest) and recent development activity indicate this is an active development branch, not a stable release

If this is temporary work for Trixie compatibility being upstreamed, add a TODO comment with a timeline for switching back to the official repository.

Additionally, the git clone command uses unquoted variables: git clone ${REPO} crowsnest -b ${BRANCH} should be git clone "${REPO}" crowsnest -b "${BRANCH}" for proper shell quoting.

🤖 Prompt for AI Agents
In `@modules/generic/53-crowsnest` around lines 20 - 21, The production config
currently points REPO="https://github.com/mryel00/crowsnest-dev.git" and
BRANCH="pynest" (a personal fork and development branch) and runs git clone
${REPO} crowsnest -b ${BRANCH}; change this to use the official upstream
repository and a stable release branch (restore mainsail-crew/crowsnest and an
appropriate tag) or, if this fork is temporarily required, add a clear TODO
comment near the REPO/BRANCH declarations stating the reason and a concrete
timeline/date to switch back to the official repo; also fix the clone invocation
to properly quote variables by using the quoted form of the git clone arguments
(i.e., quote REPO and BRANCH) so shell expansion is safe.

DEPS=(git make)

########################################
# Install System Packages #
Expand All @@ -36,22 +32,9 @@ apt-get install --yes "${DEPS[@]}"
########################################

pushd "/home/${BASE_USER}" &> /dev/null || exit 1
sudo -u "${BASE_USER}" git clone ${REPO} crowsnest
sudo -u "${BASE_USER}" git clone ${REPO} crowsnest -b ${BRANCH}
popd &> /dev/null || exit 1

########################################
# Installation Crowsnest Dependencies #
########################################

PKGLIST=$(
# shellcheck disable=SC1090
source "$INSTALL_SCRIPT"
echo "$PKGLIST"
)
# convert string to array
read -ra PKGARRAY <<< "$PKGLIST"
apt-get install --yes "${PKGARRAY[@]}"

########################################
# Installation Crowsnest #
########################################
Expand Down
1 change: 1 addition & 0 deletions modules/generic/files/00-config
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export HOLD_PKGS=(
)

export BASE_USER=pi
export BASE_PASSWORD=raspberry
export DIST_NAME=MainsailOS

export PRINTER_DATA_DIRS="printer_data printer_data/config printer_data/comms printer_data/logs printer_data/systemd"
Expand Down
27 changes: 27 additions & 0 deletions modules/raspberry/10-config-raspberry
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,30 @@ if [[ -f "${PICONFIG_SWAP_CONF_FILE}" ]]; then
sed -i 's/^CONF_SWAPSIZE.*/'CONF_SWAPSIZE="${SWAP_SIZE}"'/' "${SWAP_CONF_FILE}"
sed -i 's/^#CONF_MAXSWAP.*/'CONF_MAXSWAP="${SWAP_MAX}"'/' "${SWAP_CONF_FILE}"
fi

########################################
# Finalize user setup and set password #
########################################

if [ -f /usr/lib/userconf-pi/userconf ]; then
hash="$(echo "$BASE_PASSWORD" | openssl passwd -6 -stdin)"
/usr/lib/userconf-pi/userconf "$BASE_USER" "${hash}"
fi

systemctl_if_exists disable userconfig.service

########################################
# Enable getty #
########################################

systemctl_if_exists enable getty@tty1.service

########################################
# Enable sshd #
########################################

if [ -f /usr/lib/raspberrypi-sys-mods/imager_custom ]; then
/usr/lib/raspberrypi-sys-mods/imager_custom enable_ssh
else
systemctl_if_exists enable ssh
fi