s3lph बनवले – फोर्जो ॲक्शन आणि नूतनीकरणासह AUR पॅकेजेस तयार करणे
Arch User Repository (AUR) हे Arch Linux साठी वापरकर्त्याने योगदान दिलेल्या स्त्रोत पॅकेजेसचा संग्रह आहे. हे पॅकेज, जे पुनरावलोकनाशिवाय कोणीही सबमिट केले जाऊ शकतात, त्यात फक्त पॅकेज मेटाडेटा आणि स्त्रोतावरून सॉफ्टवेअर डाउनलोड आणि तयार करण्याच्या सूचना असतात. याचा अर्थ असा की AUR पॅकेजेस वापरताना विशेष काळजी घेणे आवश्यक आहे; ते अत्यंत उपयुक्त असू शकतात, परंतु त्यामध्ये मालवेअर देखील असू शकतात जसे की अलीकडेच उघड झाले आहे.
AUR पॅकेज तयार करण्याचा “शिफारस केलेला” मार्ग म्हणजे पॅकेज स्रोत भांडार तपासणे, त्यातील सामग्रीचे पुनरावलोकन करणे आणि नंतर आर्कचा वापर करून पॅकेज तयार करणे. makepkg पॅकेज बिल्ड टूल. ही एक कंटाळवाणी प्रक्रिया असल्याने, विविध AUR बिल्ड हेल्पर टूल्स अस्तित्वात आहेत, तथापि त्यांचा वापर करण्याची शिफारस केलेली नाही, कारण ते बऱ्याचदा कठीण-टू-समस्या निवारणासाठी कारणीभूत असतात. अशा AUR सहाय्यकांचा दीर्घकाळ वापरकर्ता असल्याने आणि वर उल्लेख केलेल्या समस्यांकडे नियमितपणे धावत असल्याने, मला AUR पॅकेजेस तयार करण्यासाठी एक चांगला (आणि अधिक सहज) उपाय शोधायचा होता.
बचावासाठी फोर्जो!
ओपन-सोर्स गिट फोर्ज फोर्जो, जे आम्ही आमच्या हॅकरस्पेसवर देखील चालवतो, आर्क लिनक्स पॅकेज रेजिस्ट्रीसह येते. आर्क लिनक्स इन्स्टॉलेशनमधील सॉफ्टवेअर रिपॉझिटरीजच्या सूचीमध्ये ही रेजिस्ट्री जोडली जाऊ शकते /etc/pacman.confआणि संकलित पॅकेजेस REST API एंडपॉइंटद्वारे त्याकडे ढकलले जाऊ शकतात.
मला आवश्यक असलेली AUR पॅकेजेस तयार करण्यासाठी, मी फोर्जो ॲक्शन्स वर्कफ्लो सेट केला आहे, जे आठवड्यातून किमान एकदा किंवा बदल रेपॉजिटरीमध्ये ढकलले जातात तेव्हा हे पॅकेज तयार करते:
---
# Build on commits to main and once a week
on:
push:
branches:
- main
schedule:
- cron: "0 6 * * 1" # every Monday at 6 AM
jobs:
# One step per package, for other packages just do `packagename: *job`
sslyze: &job
runs-on: docker
container:
# base-devel is implicitly required for package building.
# Any other dependencies must be declared explicitly.
image: docker.io/library/archlinux:base-devel
env:
# Secrets required to push to the package registry
API_REPOSITORY_ARCH: ${{ secrets.API_REPOSITORY_ARCH }}
API_REPOSITORY_ARCH_DEBUG: ${{ secrets.API_REPOSITORY_ARCH_DEBUG }}
API_USERNAME: ${{ secrets.API_USERNAME }}
API_PASSWORD: ${{ secrets.API_PASSWORD }}
steps:
- name: Prepare build pipeline
run: |
# nodejs and git are needed for the checkout action; unlike the default image,
# `docker.io/library/ubuntu`, these are not shipped by default in `archlinux:base-devel`.
pacman --noconfirm -Sy nodejs git
- name: Checkout repository
# This only checks out the project repo, not the submodules
uses: https://code.forgejo.org/actions/checkout@v7
- name: Build and upload package
run: |
# Add AUR repo itself for makedepends from AUR
curl https://git.kabelsalat.ch/api/packages/s3lph/arch/repository.key > /sign.gpg
pacman-key --init
pacman-key --add /sign.gpg
pacman-key --lsign-key 's3lph@noreply.git.kabelsalat.ch'
cat >> /etc/pacman.conf
(aur)
SigLevel = Required
Server = https://git.kabelsalat.ch/api/packages/s3lph/arch/aur/\$arch
EOF
pacman -Sy
# Checkout only the submodule of the package to build in this job
git submodule update --init "${FORGEJO_JOB}"
chown nobody: -R "${FORGEJO_JOB}" && cd "${FORGEJO_JOB}"
# Check if the PKGBUILD contains run-time or compile-time dependencies, and install if necessary
(source ./PKGBUILD && (( -n "${depends(@)}${makedepends(@)}" )) && pacman --noconfirm -S ${depends(@)} ${makedepends(@)} || true)
# Build the binary package(s) from this source package
sudo -E -u nobody -- makepkg --cleanbuild
# All debug packages are uploaded to the separate aur-debug registry
for file in *-debug-*pkg.tar*; do
curl -X PUT "${API_REPOSITORY_ARCH_DEBUG}" \
--user "${API_USERNAME}:${API_PASSWORD}" \
--header "Content-Type: application/octet-stream" \
--data-binary @"${file}" || true
done
rm -f *-debug-*pkg.tar*
# The regular packages are uploaded to the `aur` registry
for file in *pkg.tar*; do
curl -X PUT "${API_REPOSITORY_ARCH}" \
--user "${API_USERNAME}:${API_PASSWORD}" \
--header "Content-Type: application/octet-stream" \
--data-binary @"${file}"
done
Renovate सह पॅकेजेस अपडेट करत आहे
त्यामुळे आता माझ्याकडे एक पाइपलाइन आहे जी मला नियमितपणे आवश्यक असलेली AUR पॅकेजेस तयार करते आणि एक भांडार आहे जिथे ही पॅकेजेस ढकलली जातात. तथापि, कोणताही दुर्भावनापूर्ण कोड सादर केला जात नाही याची खात्री करण्यासाठी मला AUR पॅकेजमधील सर्व बदलांचे पुनरावलोकन करण्याची समस्या अजूनही आली आहे.
याचे निराकरण करण्यासाठी, मी माझ्या पाइपलाइन रेपॉजिटरीमध्ये आवश्यक असलेले सर्व AUR पॅकेज रिपॉझिटरीज गिट सबमॉड्यूल म्हणून जोडले. हे सबमॉड्यूल एका निश्चित गिट कमिट आयडीवर पिन केलेले आहेत, म्हणून मी पुनरावलोकन न केलेले नवीनतम बदल खेचत नाही, परंतु नेहमी एक पॅकेज तयार करतो ज्यासाठी मला माहित आहे की मी बिल्ड सूचनांचे पुनरावलोकन केले आहे.
या सबमॉड्यूल्सची अपडेट्स प्राप्त करण्यासाठी, मी रिनोवेट हे अवलंबित्व व्यवस्थापन साधन वापरत आहे, जे त्याच फोर्जो सर्व्हरवरील दुसऱ्या रेपॉजिटरीमध्ये फोर्जो ॲक्शन वर्कफ्लो म्हणून चालते. दिवसातून एकदा, नूतनीकरण तपासते की कोणत्याही प्रकारचे अवलंबित्व अद्यतने आहेत की नाही जी ते देखरेख ठेवणाऱ्या भांडारांवर लागू करणे आवश्यक आहे. इतर अनेक प्रकारच्या अवलंबनांपैकी, रिनोवेट ही कमिट ए गिट सबमॉड्यूल पॉईंट करते की नाही हे तपासण्यासाठी देखील समर्थन करते. अशी कोणतीही “कालबाह्य” अवलंबित्व आढळल्यास, Renovate रेपॉजिटरी विरुद्ध पुल विनंती उघडते आणि पुनरावलोकनासाठी मालकास नियुक्त करते.
तथापि, या पुल विनंत्यांमध्ये केवळ बदललेल्या सबमॉड्यूल कमिट आयडीचा समावेश आहे, त्यामुळे वास्तविक बदलांचे पुनरावलोकन करणे तितके क्षुल्लक नाही:
--- a/sslyze
+++ b/sslyze
@@ -1 +1 @@
-Subproject commit 848023a5347b8af959de3287d65eb12b0fc341e2
+Subproject commit d78430b2aad33c00ca047f4f498d61ef9a25566e
कोडेचा शेवटचा भाग हा आणखी एक फोर्जो ॲक्शन्स वर्कफ्लो आहे, जो या पुल विनंत्यांमुळे ट्रिगर झाला आहे:
---
# Run whenever a PR is opened or changed
on:
pull_request:
types:
- opened
- synchronize
- reopened
jobs:
diff:
runs-on: docker
steps:
- name: Checkout repository
uses: https://code.forgejo.org/actions/checkout@v6
with:
submodules: true
fetch-depth: 0
- name: Compute diff and post comment
run: |
apt update; apt install --yes python3-all
# the comment.py script just posts the output of `git diff --submodule=diff`
# as a comment to the PR, or updates an existing comment.
python3 .forgejo/comment.py
हा वर्कफ्लो सर्व सबमॉड्यूल्ससह पाइपलाइन रेपॉजिटरी तपासतो आणि सबमॉड्यूल्ससह PR भिन्नतेची गणना करतो. परिणामी फरक नंतर पुल विनंतीवर टिप्पणी म्हणून पोस्ट केला जातो, जो मला बदलांचे सहजपणे पुनरावलोकन करण्यास अनुमती देतो:
आकृती 1: फोर्जो ॲक्शन्सच्या पुल विनंतीवर टिप्पणी केलेल्या भिन्नतेचा स्क्रीनशॉट
