Skip to content

Commit 8a715e2

Browse files
Merge pull request #1845 from craigcomstock/alpine-apk-packages-module
CFE-3451 Added apk package module support for alpinelinux
2 parents d4545e0 + 3cce164 commit 8a715e2

3 files changed

Lines changed: 123 additions & 0 deletions

File tree

lib/packages.cf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,19 @@ bundle common package_module_knowledge
3333
"platform_default" string => "msiexec";
3434
@endif
3535

36+
alpinelinux::
37+
"platform_default" string => "apk";
38+
3639
termux::
3740
"platform_default" string => "apt_get";
3841
}
3942

43+
body package_module apk
44+
{
45+
query_installed_ifelapsed => "$(def.package_module_query_installed_ifelapsed)";
46+
query_updates_ifelapsed => "$(def.package_module_query_updates_ifelapsed)";
47+
}
48+
4049
body package_module apt_get
4150
{
4251
query_installed_ifelapsed => "$(def.package_module_query_installed_ifelapsed)";

modules/packages/apk

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/bin/sh -e
2+
get_package_data() {
3+
file="${INPUT_File?File must be given to get-package-data}"
4+
set +e
5+
apk verify $file 2>/dev/null >/dev/null
6+
rc=$?
7+
set -e
8+
if [ 0 = $rc ]; then
9+
echo "PackageType=file"
10+
name=$(basename $file)
11+
echo $name | sed -e 's/-/ /' -e 's/.apk/ apk/' | awk '
12+
{
13+
printf("Name=%s\n",$1)
14+
printf("Version=%s\n",$2)
15+
}'
16+
else
17+
echo PackageType=repo
18+
echo Name=$file
19+
fi
20+
}
21+
22+
list_installed() {
23+
# Example `apk list --installed` output:
24+
# busybox-1.32.0-r3 x86_64 {busybox} (GPL-2.0-only) [installed]
25+
#
26+
# After rewrite:
27+
# Name=busybox
28+
# Version=1.32.0-r3
29+
# Architecture=x86_64
30+
apk list --installed | sed 's/-/ /' | awk '
31+
{
32+
printf("Name=%s\n",$1)
33+
printf("Version=%s\n",$2)
34+
printf("Architecture=%s\n",$3)
35+
}'
36+
}
37+
38+
repo_install() {
39+
name="${INPUT_Name?Name must be given to repo-install}"
40+
version="${INPUT_Version}"
41+
if [ ! -z "${INPUT_Version}" ]; then
42+
apk add "$name=$version" 2>/dev/null >/dev/null
43+
else
44+
apk add --upgrade "$name" 2>/dev/null >/dev/null
45+
fi
46+
}
47+
48+
file_install() {
49+
file="${INPUT_File?File must be given to file-install}"
50+
apk add $file 2>/dev/null >/dev/null
51+
}
52+
53+
list_updates() {
54+
# for some odd reason --upgradable does not work where -u does
55+
apk list -u | sed 's/-/ /' | awk '
56+
{
57+
printf("Name=%s\n",$1)
58+
printf("Version=%s\n",$2)
59+
printf("Architecture=%s\n",$3)
60+
}'
61+
}
62+
63+
remove() {
64+
name="${INPUT_Name?Name must be given to remove}"
65+
apk del "$name" 2>/dev/null >/dev/null
66+
}
67+
68+
main() {
69+
command=$1
70+
71+
# Output maybe contain backslashes, and we don't want those to end up escaping
72+
# something so we use use -r with read.
73+
while read -r line; do
74+
# Note that line is a variable assignment, e.g.
75+
# INPUT_File=syncthing
76+
export INPUT_$line
77+
done
78+
79+
80+
case $command in
81+
supports-api-version)
82+
echo 1
83+
;;
84+
get-package-data)
85+
get_package_data
86+
;;
87+
list-installed)
88+
list_installed
89+
;;
90+
repo-install)
91+
repo_install
92+
;;
93+
file-install)
94+
file_install
95+
;;
96+
list-updates)
97+
list_updates
98+
;;
99+
list-updates-local)
100+
list_updates
101+
;;
102+
remove)
103+
remove
104+
;;
105+
*)
106+
echo "ErrorMessage=Invalid operation"
107+
esac
108+
}
109+
110+
main $1

promises.cf.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ body common control
110110
termux::
111111
package_module => $(package_module_knowledge.platform_default);
112112

113+
alpinelinux::
114+
package_module => $(package_module_knowledge.platform_default);
115+
116+
113117
any::
114118
ignore_missing_bundles => "$(def.control_common_ignore_missing_bundles)";
115119
ignore_missing_inputs => "$(def.control_common_ignore_missing_inputs)";

0 commit comments

Comments
 (0)