mirror of https://github.com/armbian/build.git
Moving repository handling from main script (#4600)
* Moving repository handling from main script - cleaning - working TBD: handling of parameters * Not needed anymore * Paramter handling, edit config in mktemp * Typo * Improve string handling * Cleanining * Compacting * Change to backslash compatible sed replacement * Publish all, update selected to avoid having erros at update * Add support for html index generation * Bugfix * More arch * Don't run publish if there is nothing in the incoming * Add repo sync control file creation * Fix hardcoded value
This commit is contained in:
parent
588c2ec17e
commit
84ca39c83c
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"rootDir": "output/repository-beta",
|
|
||||||
"downloadConcurrency": 4,
|
|
||||||
"downloadSpeedLimit": 0,
|
|
||||||
"architectures": [],
|
|
||||||
"dependencyFollowSuggests": false,
|
|
||||||
"dependencyFollowRecommends": false,
|
|
||||||
"dependencyFollowAllVariants": false,
|
|
||||||
"dependencyFollowSource": false,
|
|
||||||
"gpgDisableSign": false,
|
|
||||||
"gpgDisableVerify": false,
|
|
||||||
"gpgProvider": "internal",
|
|
||||||
"downloadSourcePackages": false,
|
|
||||||
"ppaDistributorID": "ubuntu",
|
|
||||||
"ppaCodename": "",
|
|
||||||
"S3PublishEndpoints": {},
|
|
||||||
"SwiftPublishEndpoints": {}
|
|
||||||
}
|
|
||||||
|
|
@ -1,300 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
adding_packages() {
|
|
||||||
# add deb files to repository if they are not already there
|
|
||||||
|
|
||||||
display_alert "Checking and adding to repository $release" "$3" "ext"
|
|
||||||
for f in "${DEB_STORAGE}${2}"/*.deb; do
|
|
||||||
local name version arch
|
|
||||||
name=$(dpkg-deb -I "${f}" | grep Package | awk '{print $2}')
|
|
||||||
version=$(dpkg-deb -I "${f}" | grep Version | awk '{print $2}')
|
|
||||||
arch=$(dpkg-deb -I "${f}" | grep Architecture | awk '{print $2}')
|
|
||||||
# add if not already there
|
|
||||||
aptly repo search -architectures="${arch}" -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${1}" 'Name (% '${name}'), $Version (='${version}'), $Architecture (='${arch}')' &> /dev/null
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
display_alert "Adding ${1}" "$name" "info"
|
|
||||||
aptly repo add -force-replace=true -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${1}" "${f}" &> /dev/null
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
addtorepo() {
|
|
||||||
# create repository
|
|
||||||
# parameter "remove" dumps all and creates new
|
|
||||||
# parameter "delete" remove incoming directory if publishing is succesful
|
|
||||||
# function: cycle trough distributions
|
|
||||||
|
|
||||||
local distributions=("stretch" "bionic" "buster" "bullseye" "focal" "hirsute" "impish" "jammy" "kinetic" "sid")
|
|
||||||
#local distributions=($(grep -rw config/distributions/*/ -e 'supported' | cut -d"/" -f3))
|
|
||||||
local errors=0
|
|
||||||
|
|
||||||
for release in "${distributions[@]}"; do
|
|
||||||
|
|
||||||
ADDING_PACKAGES="false"
|
|
||||||
if [[ -d "config/distributions/${release}/" ]]; then
|
|
||||||
[[ -n "$(cat config/distributions/${release}/support | grep "csc\|supported" 2> /dev/null)" ]] && ADDING_PACKAGES="true"
|
|
||||||
else
|
|
||||||
display_alert "Skipping adding packages (not supported)" "$release" "wrn"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
local forceoverwrite=""
|
|
||||||
|
|
||||||
# let's drop from publish if exits
|
|
||||||
if [[ -n $(aptly publish list -config="${SCRIPTPATH}config/${REPO_CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}") ]]; then
|
|
||||||
aptly publish drop -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" > /dev/null 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create local repository if not exist
|
|
||||||
if [[ -z $(aptly repo list -config="${SCRIPTPATH}config/${REPO_CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}") ]]; then
|
|
||||||
display_alert "Creating section" "main" "info"
|
|
||||||
aptly repo create -config="${SCRIPTPATH}config/${REPO_CONFIG}" -distribution="${release}" -component="main" \
|
|
||||||
-comment="Armbian main repository" "${release}" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $(aptly repo list -config="${SCRIPTPATH}config/${REPO_CONFIG}" -raw | awk '{print $(NF)}' | grep "^utils") ]]; then
|
|
||||||
aptly repo create -config="${SCRIPTPATH}config/${REPO_CONFIG}" -distribution="${release}" -component="utils" \
|
|
||||||
-comment="Armbian utilities (backwards compatibility)" utils > /dev/null
|
|
||||||
fi
|
|
||||||
if [[ -z $(aptly repo list -config="${SCRIPTPATH}config/${REPO_CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}-utils") ]]; then
|
|
||||||
aptly repo create -config="${SCRIPTPATH}config/${REPO_CONFIG}" -distribution="${release}" -component="${release}-utils" \
|
|
||||||
-comment="Armbian ${release} utilities" "${release}-utils" > /dev/null
|
|
||||||
fi
|
|
||||||
if [[ -z $(aptly repo list -config="${SCRIPTPATH}config/${REPO_CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}-desktop") ]]; then
|
|
||||||
aptly repo create -config="${SCRIPTPATH}config/${REPO_CONFIG}" -distribution="${release}" -component="${release}-desktop" \
|
|
||||||
-comment="Armbian ${release} desktop" "${release}-desktop" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# adding main
|
|
||||||
if find "${DEB_STORAGE}"/ -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
|
||||||
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "$release" "" "main"
|
|
||||||
else
|
|
||||||
aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" "${SCRIPTPATH}config/templates/example.deb" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
local COMPONENTS="main"
|
|
||||||
|
|
||||||
# adding main distribution packages
|
|
||||||
if find "${DEB_STORAGE}/${release}" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
|
||||||
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-utils" "/${release}" "release packages"
|
|
||||||
else
|
|
||||||
# workaround - add dummy package to not trigger error
|
|
||||||
aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" "${SCRIPTPATH}config/templates/example.deb" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# adding release-specific utils
|
|
||||||
if find "${DEB_STORAGE}/extra/${release}-utils" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
|
||||||
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-utils" "/extra/${release}-utils" "release utils"
|
|
||||||
else
|
|
||||||
aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-utils" "${SCRIPTPATH}config/templates/example.deb" > /dev/null
|
|
||||||
fi
|
|
||||||
COMPONENTS="${COMPONENTS} ${release}-utils"
|
|
||||||
|
|
||||||
# adding desktop
|
|
||||||
if find "${DEB_STORAGE}/extra/${release}-desktop" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
|
||||||
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-desktop" "/extra/${release}-desktop" "desktop"
|
|
||||||
else
|
|
||||||
# workaround - add dummy package to not trigger error
|
|
||||||
aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" "${SCRIPTPATH}config/templates/example.deb" > /dev/null
|
|
||||||
fi
|
|
||||||
COMPONENTS="${COMPONENTS} ${release}-desktop"
|
|
||||||
|
|
||||||
local mainnum utilnum desknum
|
|
||||||
mainnum=$(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" | grep "Number of packages" | awk '{print $NF}')
|
|
||||||
utilnum=$(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" | grep "Number of packages" | awk '{print $NF}')
|
|
||||||
desknum=$(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-utils" | grep "Number of packages" | awk '{print $NF}')
|
|
||||||
|
|
||||||
if [ $mainnum -gt 0 ] && [ $utilnum -gt 0 ] && [ $desknum -gt 0 ]; then
|
|
||||||
|
|
||||||
# publish
|
|
||||||
aptly publish \
|
|
||||||
-acquire-by-hash \
|
|
||||||
-passphrase="${GPG_PASS}" \
|
|
||||||
-origin="Armbian" \
|
|
||||||
-label="Armbian" \
|
|
||||||
-config="${SCRIPTPATH}config/${REPO_CONFIG}" \
|
|
||||||
-component="${COMPONENTS// /,}" \
|
|
||||||
-distribution="${release}" repo "${release}" ${COMPONENTS//main/} > /dev/null
|
|
||||||
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
display_alert "Publishing failed" "${release}" "err"
|
|
||||||
errors=$((errors + 1))
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
errors=$((errors + 1))
|
|
||||||
local err_txt=": All components must be present: main, utils and desktop for first build"
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
# cleanup
|
|
||||||
display_alert "Cleaning repository" "${DEB_STORAGE}" "info"
|
|
||||||
aptly db cleanup -config="${SCRIPTPATH}config/${REPO_CONFIG}"
|
|
||||||
|
|
||||||
# display what we have
|
|
||||||
echo ""
|
|
||||||
display_alert "List of local repos" "local" "info"
|
|
||||||
(aptly repo list -config="${SCRIPTPATH}config/${REPO_CONFIG}") | grep -E packages
|
|
||||||
|
|
||||||
# remove debs if no errors found
|
|
||||||
if [[ $errors -eq 0 ]]; then
|
|
||||||
if [[ "$2" == "delete" ]]; then
|
|
||||||
display_alert "Purging incoming debs" "all" "ext"
|
|
||||||
find "${DEB_STORAGE}" -name "*.deb" -type f -delete
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
display_alert "There were some problems $err_txt" "leaving incoming directory intact" "err"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
repo-manipulate() {
|
|
||||||
# repository manipulation
|
|
||||||
# "show" displays packages in each repository
|
|
||||||
# "server" serve repository - useful for local diagnostics
|
|
||||||
# "unique" manually select which package should be removed from all repositories
|
|
||||||
# "update" search for new files in output/debs* to add them to repository
|
|
||||||
# "purge" leave only last 5 versions
|
|
||||||
|
|
||||||
local DISTROS=("stretch" "bionic" "buster" "bullseye" "focal" "hirsute" "impish" "jammy" "sid")
|
|
||||||
#local DISTROS=($(grep -rw config/distributions/*/ -e 'supported' | cut -d"/" -f3))
|
|
||||||
|
|
||||||
case $@ in
|
|
||||||
|
|
||||||
serve)
|
|
||||||
# display repository content
|
|
||||||
display_alert "Serving content" "common utils" "ext"
|
|
||||||
aptly serve -listen=$(ip -f inet addr | grep -Po 'inet \K[\d.]+' | grep -v 127.0.0.1 | head -1):80 -config="${SCRIPTPATH}config/${REPO_CONFIG}"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
show)
|
|
||||||
# display repository content
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
display_alert "Displaying repository contents for" "$release" "ext"
|
|
||||||
aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" | tail -n +7
|
|
||||||
aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" | tail -n +7
|
|
||||||
done
|
|
||||||
display_alert "Displaying repository contents for" "common utils" "ext"
|
|
||||||
aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" utils | tail -n +7
|
|
||||||
echo "done."
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
unique)
|
|
||||||
# which package should be removed from all repositories
|
|
||||||
IFS=$'\n'
|
|
||||||
while true; do
|
|
||||||
LIST=()
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
LIST+=($(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" | tail -n +7))
|
|
||||||
LIST+=($(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" | tail -n +7))
|
|
||||||
done
|
|
||||||
LIST+=($(aptly repo show -with-packages -config="${SCRIPTPATH}config/${REPO_CONFIG}" utils | tail -n +7))
|
|
||||||
LIST=($(echo "${LIST[@]}" | tr ' ' '\n' | sort -u))
|
|
||||||
new_list=()
|
|
||||||
# create a human readable menu
|
|
||||||
for ((n = 0; n < $((${#LIST[@]})); n++)); do
|
|
||||||
new_list+=("${LIST[$n]}")
|
|
||||||
new_list+=("")
|
|
||||||
done
|
|
||||||
LIST=("${new_list[@]}")
|
|
||||||
LIST_LENGTH=$((${#LIST[@]} / 2))
|
|
||||||
exec 3>&1
|
|
||||||
TARGET_VERSION=$(dialog --cancel-label "Cancel" --backtitle "BACKTITLE" --no-collapse --title "Remove packages from repositories" --clear --menu "Delete" $((9 + ${LIST_LENGTH})) 82 65 "${LIST[@]}" 2>&1 1>&3)
|
|
||||||
exitstatus=$?
|
|
||||||
exec 3>&-
|
|
||||||
if [[ $exitstatus -eq 0 ]]; then
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
aptly repo remove -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" "$TARGET_VERSION"
|
|
||||||
aptly repo remove -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" "$TARGET_VERSION"
|
|
||||||
done
|
|
||||||
aptly repo remove -config="${SCRIPTPATH}config/${REPO_CONFIG}" "utils" "$TARGET_VERSION"
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
aptly db cleanup -config="${SCRIPTPATH}config/${REPO_CONFIG}" > /dev/null 2>&1
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
|
|
||||||
update)
|
|
||||||
# display full help test
|
|
||||||
# run repository update
|
|
||||||
addtorepo "update" ""
|
|
||||||
# add a key to repo
|
|
||||||
cp "${SCRIPTPATH}"config/armbian.key "${REPO_STORAGE}"/public/
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
purge)
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
repo-remove-old-packages "$release" "armhf" "5"
|
|
||||||
repo-remove-old-packages "$release" "arm64" "5"
|
|
||||||
repo-remove-old-packages "$release" "amd64" "5"
|
|
||||||
repo-remove-old-packages "$release" "all" "5"
|
|
||||||
aptly -config="${SCRIPTPATH}config/${REPO_CONFIG}" -passphrase="${GPG_PASS}" publish update "${release}" > /dev/null 2>&1
|
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
purgeedge)
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
repo-remove-old-packages "$release" "armhf" "3" "edge"
|
|
||||||
repo-remove-old-packages "$release" "arm64" "3" "edge"
|
|
||||||
repo-remove-old-packages "$release" "amd64" "3" "edge"
|
|
||||||
repo-remove-old-packages "$release" "all" "3" "edge"
|
|
||||||
aptly -config="${SCRIPTPATH}config/${REPO_CONFIG}" -passphrase="${GPG_PASS}" publish update "${release}" > /dev/null 2>&1
|
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
\
|
|
||||||
purgesource)
|
|
||||||
for release in "${DISTROS[@]}"; do
|
|
||||||
aptly repo remove -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" 'Name (% *-source*)'
|
|
||||||
aptly -config="${SCRIPTPATH}config/${REPO_CONFIG}" -passphrase="${GPG_PASS}" publish update "${release}" > /dev/null 2>&1
|
|
||||||
done
|
|
||||||
aptly db cleanup -config="${SCRIPTPATH}config/${REPO_CONFIG}" > /dev/null 2>&1
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
|
|
||||||
echo -e "Usage: repository show | serve | unique | create | update | purge | purgesource\n"
|
|
||||||
echo -e "\n show = display repository content"
|
|
||||||
echo -e "\n serve = publish your repositories on current server over HTTP"
|
|
||||||
echo -e "\n unique = manually select which package should be removed from all repositories"
|
|
||||||
echo -e "\n update = updating repository"
|
|
||||||
echo -e "\n purge = removes all but last 5 versions"
|
|
||||||
echo -e "\n purgeedge = removes all but last 3 edge versions"
|
|
||||||
echo -e "\n purgesource = removes all sources\n\n"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Removes old packages in the received repo
|
|
||||||
#
|
|
||||||
# $1: Repository
|
|
||||||
# $2: Architecture
|
|
||||||
# $3: Amount of packages to keep
|
|
||||||
# $4: Additional search pattern
|
|
||||||
repo-remove-old-packages() {
|
|
||||||
local repo=$1
|
|
||||||
local arch=$2
|
|
||||||
local keep=$3
|
|
||||||
for pkg in $(aptly repo search -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${repo}" "Architecture ($arch)" | grep -v "ERROR: no results" | sort -t '.' -nk4 | grep -e "$4"); do
|
|
||||||
local pkg_name
|
|
||||||
count=0
|
|
||||||
pkg_name=$(echo "${pkg}" | cut -d_ -f1)
|
|
||||||
for subpkg in $(aptly repo search -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${repo}" "Name ($pkg_name)" | grep -v "ERROR: no results" | sort -rt '.' -nk4); do
|
|
||||||
((count += 1))
|
|
||||||
if [[ $count -gt $keep ]]; then
|
|
||||||
pkg_version=$(echo "${subpkg}" | cut -d_ -f2)
|
|
||||||
aptly repo remove -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${repo}" "Name ($pkg_name), Version (= $pkg_version)"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
@ -61,30 +61,6 @@ function prepare_and_config_main_build_single() {
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n $REPOSITORY_UPDATE ]]; then
|
|
||||||
|
|
||||||
# select stable/beta configuration
|
|
||||||
if [[ $BETA == yes ]]; then
|
|
||||||
DEB_STORAGE=$DEST/debs-beta
|
|
||||||
REPO_STORAGE=$DEST/repository-beta
|
|
||||||
REPO_CONFIG="aptly-beta.conf"
|
|
||||||
else
|
|
||||||
DEB_STORAGE=$DEST/debs
|
|
||||||
REPO_STORAGE=$DEST/repository
|
|
||||||
REPO_CONFIG="aptly.conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For user override
|
|
||||||
if [[ -f "${USERPATCHES_PATH}"/lib.config ]]; then
|
|
||||||
display_alert "Using user configuration override" "userpatches/lib.config" "info"
|
|
||||||
source "${USERPATCHES_PATH}"/lib.config
|
|
||||||
fi
|
|
||||||
|
|
||||||
repo-manipulate "$REPOSITORY_UPDATE"
|
|
||||||
exit
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu
|
# if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu
|
||||||
|
|
||||||
backward_compatibility_build_only
|
backward_compatibility_build_only
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"rootDir": "output/repository",
|
"rootDir": "output",
|
||||||
"downloadConcurrency": 4,
|
"downloadConcurrency": 4,
|
||||||
"downloadSpeedLimit": 0,
|
"downloadSpeedLimit": 0,
|
||||||
"architectures": [],
|
"architectures": [],
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1
|
||||||
|
|
||||||
|
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
|
||||||
|
cckukNqqFv/CXh+BZFlQT4DDvJlY0/KQFFKogQ==
|
||||||
|
=I/P8
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
Binary file not shown.
|
|
@ -0,0 +1 @@
|
||||||
|
</table></body></html>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<style>
|
||||||
|
table {
|
||||||
|
color: #333; /* Lighten up font color */
|
||||||
|
font-family: Helvetica, Arial, sans-serif; /* Nicer font */
|
||||||
|
width: 100%;
|
||||||
|
border-collapse:
|
||||||
|
collapse; border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th { border: 1px solid #CCC; height: 30px; padding: 15px; } /* Make cells a bit taller */
|
||||||
|
th {
|
||||||
|
background: #F3F3F3; /* Light grey background */
|
||||||
|
font-weight: bold; /* Make sure they're bold */
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
background: #FAFAFA; /* Lighter grey background */
|
||||||
|
text-align: left; /* Center our text */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body class="container">
|
||||||
|
<table>
|
||||||
|
|
@ -0,0 +1,332 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Adding package
|
||||||
|
#
|
||||||
|
# @arg $1 string component
|
||||||
|
# @arg $2 string incoming folder
|
||||||
|
# @arg $3 string description
|
||||||
|
# @arg $4 input folder
|
||||||
|
#
|
||||||
|
adding_packages() {
|
||||||
|
# add deb files to repository if they are not already there
|
||||||
|
for f in "${4}${2}"/*.deb; do
|
||||||
|
local package name version arch
|
||||||
|
# read package
|
||||||
|
package=$(dpkg-deb -I "${f}")
|
||||||
|
name=$(echo "${package}" | awk /Package/'{print $2}')
|
||||||
|
version=$(echo "${package}" | awk /Version/'{print $2}')
|
||||||
|
arch=$(echo "${package}" | awk /Architecture/'{print $2}')
|
||||||
|
# add if not already there
|
||||||
|
aptly repo search -architectures="${arch}" -config="${CONFIG}" "${1}" \
|
||||||
|
'Name (% '${name}'), $Version (='${version}'), $Architecture (='${arch}')' &> /dev/null
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
echo -e "Checking and adding \x1B[92m$name\x1B[0m to repository \x1B[92m$release $3\x1B[0m"
|
||||||
|
aptly repo add -force-replace=true -config="${CONFIG}" "${1}" "${f}" &> /dev/null
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# publishing repository
|
||||||
|
#
|
||||||
|
# $1: Input folder
|
||||||
|
# $2: Output folder
|
||||||
|
# $3: Command
|
||||||
|
# $4: GPG password
|
||||||
|
# $5: jammy,sid
|
||||||
|
#
|
||||||
|
publishing() {
|
||||||
|
# read comma delimited distros into array
|
||||||
|
IFS=', ' read -r -a DISTROS <<< "$5"
|
||||||
|
local errors=0
|
||||||
|
# publish all, update selected
|
||||||
|
local distributions=("jessy" "xenial" "stretch" "bionic" "buster" "bullseye" "focal" "hirsute" "impish" "jammy" "kinetic" "sid")
|
||||||
|
for release in "${distributions[@]}"; do
|
||||||
|
local forceoverwrite=""
|
||||||
|
|
||||||
|
ADDING_PACKAGES="false"
|
||||||
|
[[ " ${DISTROS[@]} " =~ " ${release} " ]] && ADDING_PACKAGES="true"
|
||||||
|
|
||||||
|
[[ $(find ${1} -type f -name "*.deb" 2> /dev/null | wc -l) -eq 0 ]] && continue
|
||||||
|
|
||||||
|
# let's drop from publish if exits
|
||||||
|
if [[ -n $(aptly publish list -config="${CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}") ]]; then
|
||||||
|
aptly publish drop -config="${CONFIG}" "${release}" > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
# create local repository if not exist
|
||||||
|
if [[ -z $(aptly repo list -config="${CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}") ]]; then
|
||||||
|
aptly repo create -config="${CONFIG}" -distribution="${release}" \
|
||||||
|
-component="main,${release}-utils,${release}-desktop" -comment="Armbian main repository" "${release}" > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
if [[ -z $(aptly repo list -config="${CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}-utils") ]]; then
|
||||||
|
aptly repo create -config="${CONFIG}" -distribution="${release}" \
|
||||||
|
-component="${release}-utils" -comment="Armbian ${release} utilities" "${release}-utils" > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
if [[ -z $(aptly repo list -config="${CONFIG}" -raw | awk '{print $(NF)}' | grep "${release}-desktop") ]]; then
|
||||||
|
aptly repo create -config="${CONFIG}" -distribution="${release}" \
|
||||||
|
-component="${release}-desktop" -comment="Armbian ${release} desktop" "${release}-desktop" > /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
# adding main
|
||||||
|
if find "$1"/ -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
||||||
|
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "$release" "" "main" "$1"
|
||||||
|
else
|
||||||
|
aptly repo add -config="${CONFIG}" "${release}" "example.deb" > /dev/null
|
||||||
|
fi
|
||||||
|
local COMPONENTS="main"
|
||||||
|
# adding release-specific main
|
||||||
|
if find "${1}/${release}" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
||||||
|
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}" "/${release}" "release packages" "$1"
|
||||||
|
else
|
||||||
|
# workaround - add dummy package to not trigger error
|
||||||
|
aptly repo add -config="${CONFIG}" "${release}" "example.deb" > /dev/null
|
||||||
|
fi
|
||||||
|
# adding release-specific utils
|
||||||
|
if find "${1}/extra/${release}-utils" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
||||||
|
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-utils" "/extra/${release}-utils" "release utils" "$1"
|
||||||
|
else
|
||||||
|
aptly repo add -config="${CONFIG}" "${release}-utils" "example.deb" > /dev/null
|
||||||
|
fi
|
||||||
|
COMPONENTS="${COMPONENTS} ${release}-utils"
|
||||||
|
# adding release-specific desktop
|
||||||
|
if find "${1}/extra/${release}-desktop" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then
|
||||||
|
[[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-desktop" "/extra/${release}-desktop" "desktop" "$1"
|
||||||
|
else
|
||||||
|
# workaround - add dummy package to not trigger error
|
||||||
|
aptly repo add -config="${CONFIG}" "${release}-desktop" "example.deb" > /dev/null
|
||||||
|
fi
|
||||||
|
COMPONENTS="${COMPONENTS} ${release}-desktop"
|
||||||
|
local mainnum utilnum desknum
|
||||||
|
mainnum=$(aptly repo show -with-packages -config="${CONFIG}" "${release}" | grep "Number of packages" | awk '{print $NF}')
|
||||||
|
utilnum=$(aptly repo show -with-packages -config="${CONFIG}" "${release}-desktop" | grep "Number of packages" | awk '{print $NF}')
|
||||||
|
desknum=$(aptly repo show -with-packages -config="${CONFIG}" "${release}-utils" | grep "Number of packages" | awk '{print $NF}')
|
||||||
|
if [ $mainnum -gt 0 ] && [ $utilnum -gt 0 ] && [ $desknum -gt 0 ]; then
|
||||||
|
# write repo sync control file
|
||||||
|
sudo date +%s > ${2}/public/.control
|
||||||
|
# publish
|
||||||
|
echo "Publishing ${release}"
|
||||||
|
aptly publish \
|
||||||
|
-acquire-by-hash \
|
||||||
|
-architectures="armhf,arm64,amd64,riscv64,i386,all" \
|
||||||
|
-passphrase="${4}" \
|
||||||
|
-origin="Armbian" \
|
||||||
|
-label="Armbian" \
|
||||||
|
-config="${CONFIG}" \
|
||||||
|
-component="${COMPONENTS// /,}" \
|
||||||
|
-distribution="${release}" repo "${release}" ${COMPONENTS//main/} > /dev/null
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
echo "Publishing failed ${release}"
|
||||||
|
errors=$((errors + 1))
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
errors=$((errors + 1))
|
||||||
|
local err_txt=": All components must be present: main, utils and desktop for first build"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# cleanup
|
||||||
|
aptly db cleanup -config="${CONFIG}" > /dev/null
|
||||||
|
# key
|
||||||
|
cp armbian.key "${2}"/public/
|
||||||
|
# display what we have
|
||||||
|
(aptly repo list -config="${CONFIG}") | grep -E packages
|
||||||
|
# remove debs if no errors found
|
||||||
|
if [[ $errors -eq 0 ]]; then
|
||||||
|
echo "Purging incoming debs"
|
||||||
|
find "${1}" -name "*.deb" -type f -delete
|
||||||
|
else
|
||||||
|
display_alert "There were some problems $err_txt" "leaving incoming directory intact" "err"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# $1: Input folder
|
||||||
|
# $2: Output folder
|
||||||
|
# $3: Command
|
||||||
|
# $4: GPG password
|
||||||
|
# $5: jammy,sid
|
||||||
|
#
|
||||||
|
repo-manipulate() {
|
||||||
|
|
||||||
|
# read comma delimited distros into array
|
||||||
|
IFS=', ' read -r -a DISTROS <<< "$5"
|
||||||
|
|
||||||
|
case $3 in
|
||||||
|
|
||||||
|
serve)
|
||||||
|
|
||||||
|
sudo aptly serve -listen=$(ip -f inet addr | grep -Po 'inet \K[\d.]+' | grep -v 127.0.0.1 | head -1):80 -config="${CONFIG}"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
html)
|
||||||
|
cat header.html
|
||||||
|
for release in "${DISTROS[@]}"; do
|
||||||
|
echo "<thead><tr><td colspan=3><h2>$release</h2></tr><tr><th>Main</th><th>Utils</th><th>Desktop</th></tr></thead>"
|
||||||
|
echo "<tbody><tr><td width=33% valing=top>"
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}" | tail -n +7 | sed 's/.*/&<br>/'
|
||||||
|
echo "</td><td width=33% valign=top>" | sudo tee -a ${filename}
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}-utils" | tail -n +7 | sed 's/.*/&<br>/'
|
||||||
|
echo "</td><td width=33% valign=top>" | sudo tee -a ${filename}
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}-desktop" | tail -n +7 | sed 's/.*/&<br>/'
|
||||||
|
echo "</td></tr></tbody>"
|
||||||
|
done
|
||||||
|
cat footer.html
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
show)
|
||||||
|
|
||||||
|
for release in "${DISTROS[@]}"; do
|
||||||
|
echo "Displaying repository contents for $release"
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}" | tail -n +7
|
||||||
|
echo "Displaying repository contents for $release-utils"
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}-utils" | tail -n +7
|
||||||
|
echo "Displaying repository contents for $release-desktop"
|
||||||
|
aptly repo show -with-packages -config="${CONFIG}" "${release}-desktop" | tail -n +7
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
unique)
|
||||||
|
# which package should be removed from all repositories
|
||||||
|
IFS=$'\n'
|
||||||
|
while true; do
|
||||||
|
LIST=()
|
||||||
|
for release in "${DISTROS[@]}"; do
|
||||||
|
LIST+=($(aptly repo show -with-packages -config="${CONFIG}" "${release}" | tail -n +7))
|
||||||
|
LIST+=($(aptly repo show -with-packages -config="${CONFIG}" "${release}-utils" | tail -n +7))
|
||||||
|
LIST+=($(aptly repo show -with-packages -config="${CONFIG}" "${release}-desktop" | tail -n +7))
|
||||||
|
done
|
||||||
|
LIST=($(echo "${LIST[@]}" | tr ' ' '\n' | sort -u))
|
||||||
|
new_list=()
|
||||||
|
# create a human readable menu
|
||||||
|
for ((n = 0; n < $((${#LIST[@]})); n++)); do
|
||||||
|
new_list+=("${LIST[$n]}")
|
||||||
|
new_list+=("")
|
||||||
|
done
|
||||||
|
LIST=("${new_list[@]}")
|
||||||
|
LIST_LENGTH=$((${#LIST[@]} / 2))
|
||||||
|
exec 3>&1
|
||||||
|
TARGET_VERSION=$(dialog --cancel-label "Cancel" --backtitle "BACKTITLE" --no-collapse --title \
|
||||||
|
"Remove packages from repositories" --clear --menu "Delete" $((9 + LIST_LENGTH)) 82 65 "${LIST[@]}" 2>&1 1>&3)
|
||||||
|
exitstatus=$?
|
||||||
|
exec 3>&-
|
||||||
|
if [[ $exitstatus -eq 0 ]]; then
|
||||||
|
for release in "${DISTROS[@]}"; do
|
||||||
|
aptly repo remove -config="${CONFIG}" "${release}" "$TARGET_VERSION"
|
||||||
|
aptly repo remove -config="${CONFIG}" "${release}-utils" "$TARGET_VERSION"
|
||||||
|
aptly repo remove -config="${CONFIG}" "${release}-desktop" "$TARGET_VERSION"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
aptly db cleanup -config="${CONFIG}" > /dev/null 2>&1
|
||||||
|
# remove empty folders
|
||||||
|
find $2/public -type d -empty -print -exec rm -rf {} \;
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
update)
|
||||||
|
publishing "$1" "$2" "$3" "$4" "$5"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo -e "Unknown command"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# defaults
|
||||||
|
input="input"
|
||||||
|
output="output"
|
||||||
|
command="show"
|
||||||
|
releases="jammy,sid"
|
||||||
|
|
||||||
|
help()
|
||||||
|
{
|
||||||
|
echo "Armbian wrapper for Aptly v1.0
|
||||||
|
|
||||||
|
(c) Igor Pecovnik, igor@armbian.com
|
||||||
|
|
||||||
|
License: (MIT) <https://mit-license.org/>
|
||||||
|
|
||||||
|
Usage: $0 [ -short | --long ]
|
||||||
|
|
||||||
|
-h --help displays this
|
||||||
|
-i --input [input folder]
|
||||||
|
-o --output [output folder]
|
||||||
|
-p --password [GPG password]
|
||||||
|
-r --repository [jammy,sid,bullseye,...]
|
||||||
|
-c --command
|
||||||
|
|
||||||
|
[show] displays packages in each repository
|
||||||
|
[html] displays packages in each repository in html form
|
||||||
|
[serve] serve repository - useful for local diagnostics
|
||||||
|
[unique] manually select which package should be removed from all repositories
|
||||||
|
[update] search for packages in input folder
|
||||||
|
"
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SHORT=i:,o:,c:,p:,r:,h
|
||||||
|
LONG=input:,output:,command:,password:,releases:,help
|
||||||
|
OPTS=$(getopt -a -n repo --options $SHORT --longoptions $LONG -- "$@")
|
||||||
|
|
||||||
|
VALID_ARGUMENTS=$# # Returns the count of arguments that are in short or long options
|
||||||
|
|
||||||
|
eval set -- "$OPTS"
|
||||||
|
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
-i | --input )
|
||||||
|
input="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-o | --output )
|
||||||
|
output="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-c | --command )
|
||||||
|
command="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-p | --password )
|
||||||
|
password="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-r | --releases )
|
||||||
|
releases="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
help
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift;
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unexpected option: $1"
|
||||||
|
help
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# define job name
|
||||||
|
[[ $(cat /var/run/repomanagement 2>/dev/null) == "$output" ]] && echo "Running. Try again later" && exit 0
|
||||||
|
echo "${output}" | sudo tee /var/run/repomanagement &>/dev/null
|
||||||
|
|
||||||
|
# redefine output folder in Aptly
|
||||||
|
TempDir="$(mktemp -d || exit 1)"
|
||||||
|
sed 's|"rootDir": ".*"|"rootDir": "'$output'"|g' aptly.conf > "${TempDir}"/aptly.conf
|
||||||
|
CONFIG="${TempDir}/aptly.conf"
|
||||||
|
|
||||||
|
# main
|
||||||
|
repo-manipulate "$input" "$output" "$command" "$password" "$releases"
|
||||||
|
RETURN=$?
|
||||||
|
sudo rm /var/run/repomanagement
|
||||||
|
exit $RETURN
|
||||||
Loading…
Reference in New Issue