pacman-tmpfs
CLEAN
maintainer ivanmara
1 votes
scanned 2026-10-30 00:29:30.650963
Triggered rules
Clean
AI review downgraded a static finding
llm_review
The static rules flagged this LOW, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it CLEAN (confidence 95%): The package builds a wrapper script from embedded code, which is normal for AUR packages, and does not download or execute remote unverified code.
1 higher static finding superseded - not the current verdict (shown for transparency)
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
PKGBUILD
1
# Maintainer: ivanmara
2
pkgname=pacman-tmpfs
3
pkgver=2026.10.25
4
pkgrel=1
5
6
pkgdesc='Wrapper for pacman, yay, paru using tmpfs for caches.'
7
url='tip://_See_PKGBUILD_for_usage_'
8
arch=('any')
9
license=('GPL')
10
depends=('pacman')
11
optdepends=('yay: Yet another yogurt. Pacman wrapper and AUR helper written in go.'
12
'paru-git: Feature packed AUR helper'
13
)
14
options=('!debug')
15
install=${pkgname}.install.sh
16
17
#---- _usage --------------------------------------------------------------------------------------
18
IFS= read -r -d '' _usage << 'EOF'
19
#
20
#
21
# USAGE:
22
# some text
23
ls -al /
24
#
25
#
26
EOF
27
echo "${_usage}" > /tmp/pacman-tmpfs_usage.txt
28
#--------------------------------------------------------------------------------------------------
29
30
#---- _script -------------------------------------------------------------------------------------
31
IFS= read -r -d '' _script << 'EOF'
32
#!/usr/bin/env bash
33
set -euo pipefail
34
# v29 test pkbuild пройден shellcheck
35
# DEFAULTS_ FLAG заменен на DEFAULT_ FLAG
36
# добавлена обработа --default
37
# default проверка переработанна
38
# refactoring приведение к обычному поведению pacman, yay без добавлений функционала
39
#
40
# полные пути заменнены на вызовы их pacman-conf <option>
41
# add paru support
42
# man yay https://jguer.github.io/yay/man.html
43
44
TMP_PACKER_DIR='/tmp/.packer_wrapper_tmp'
45
TMP_PACKER_DIR=${ mktemp --dry-run ${TMP_PACKER_DIR}_${EUID}_XXXXXXXXXX; }
46
TMP_PACMAN_CACHE_DIR=${TMP_PACKER_DIR}/pacman_cache/
47
TMP_PACMAN_CONF_PATH=${TMP_PACKER_DIR}/pacman_tmp.conf
48
TMP_PACMAN_LOG_PATH=${TMP_PACKER_DIR}/pacman_tmp.log
49
TMP_MAKEPKG_CONF_PATH=${TMP_PACKER_DIR}/makepkg_tmp.conf
50
51
# параметры запуска pacman (по умолчанию tmpfs)
52
PACMAN_CMD_OPTIONS_ARRAY=(
53
"--config ${TMP_PACMAN_CONF_PATH}"
54
"--cachedir ${TMP_PACMAN_CACHE_DIR}"
55
"--logfile ${TMP_PACMAN_LOG_PATH}"
56
'--color always'
57
)
58
59
# параметры запуска pacman (для случая опции --default)
60
PACMAN_CMD_OPTIONS_DEFAULT_ARRAY=(
61
"--config /etc/pacman.conf"
62
'--color always'
63
)
64
65
# добавляемые опции во временный pacman.conf.
66
# ПЕРЕРАБОТАТЬ: Как быть если составной параметр типа: ParallelDownloads = 5 ????
67
# прям сдесь сделать комманду sed для замены ?
68
PACMAN_CONF_OPTIONS_ARRAY=(
69
'Color'
70
'VerbosePkgLists'
71
)
72
73
MAKEPKG_CONF_OPTIONS='
74
MAKEFLAGS="-j$(nproc)"
75
# disable creating debug packages
76
OPTIONS+=(!debug)
77
# disable compression entirely. see: man makepkg.conf
78
PKGEXT=".pkg.tar"
79
SRCEXT=".src.tar"
80
'
81
82
# associated array of env folders to create
83
declare -rA ENV_FOLDERS_ARRAY=(
84
# to disable pacman warning: no ... cache exists, creating...
85
[TMP_PACKER_DIR]=${TMP_PACKER_DIR}
86
[TMP_PACMAN_CACHE_DIR]=${TMP_PACMAN_CACHE_DIR}
87
# env vars for yay ( see: man yay )
88
[AURDEST]=${TMP_PACKER_DIR}/packer/_AURDEST
89
[XDG_CONFIG_HOME]=${TMP_PACKER_DIR}/packer/_XDG_CONFIG_HOME
90
[XDG_CACHE_HOME]=${TMP_PACKER_DIR}/packer/_XDG_CACHE_HOME
91
[GOCACHE]=${TMP_PACKER_DIR}/packer/_GOCACHE
92
# env vars for paru ( see: man paru )
93
[XDG_STATE_HOME]=${TMP_PACKER_DIR}/packer/_XDG_STATE_HOME
94
# env vars for makepkg ( see: man makepkg.conf; /etc/makepkg.conf )
95
[BUILDDIR]=${TMP_PACKER_DIR}/makepkg/_BUILDDIR
96
[PKGDEST]=${TMP_PACKER_DIR}/makepkg/_PKGDEST
97
[SRCDEST]=${TMP_PACKER_DIR}/makepkg/_SRCDEST
98
[SRCPKGDEST]=${TMP_PACKER_DIR}/makepkg/_SRCPKGDEST
99
[LOGDEST]=${TMP_PACKER_DIR}/makepkg/_LOGDEST
100
)
101
102
DEFAULT_OPTION_STR='--default'
103
declare -i DEFAULT_FLAG=${DEFAULT_FLAG:=0} # признак что запуск c default /etc/pacman.conf. может прилететь с перевывозом через env vars
104
105
SCRIPT_ARGS=${*}
106
CALLABLE_PACKER=${ basename ${0}; }
107
108
#-------------------------------------------------------------------------------
109
function __main__ ()
110
{
111
if (( DEFAULT_FLAG == 0 )); then
112
# ищем слово опции умолчаний в аргументах. contains in array: https://stackoverflow.com/a/28032613
113
if grep --quiet --word-regexp -- ${DEFAULT_OPTION_STR} <<< "${SCRIPT_ARGS}"; then
114
DEFAULT_FLAG=1
115
fi
116
fi
117
118
if (( DEFAULT_FLAG == 1 )); then
119
SCRIPT_ARGS=${SCRIPT_ARGS//${DEFAULT_OPTION_STR}/} # удаляем слово заменой умолчаний из параметров. from: https://github.com/koalaman/shellcheck/wiki/SC2001
120
PACMAN_CMD_OPTIONS_ARRAY=("${PACMAN_CMD_OPTIONS_DEFAULT_ARRAY[@]}") # назначаем опции для случая --default
121
fi
122
123
local _pacman_cache_location=${ (( DEFAULT_FLAG == 0 )) && echo tmpfs || echo CacheDir: ${ pacman-conf CacheDir; }; }
124
say ":: wrapper ${CALLABLE_PACKER} ${_pacman_cache_location}"
125
126
_check_packer_exist
127
trap _cleanup EXIT # регистрируем обработчик сигнала EXIT типа Ctrl+C, список: trap -l
128
_prepare_folders_and_configs
129
_run_packer
130
}
131
132
#-------------------------------------------------------------------------------
133
function _check_packer_exist ()
134
{
135
PACKER_BIN="/usr/bin/${CALLABLE_PACKER}"
136
if ! command -v ${PACKER_BIN} > /dev/null 2>&1; then
137
warning ":: error: ${CALLABLE_PACKER}: packer command: /usr/bin/${CALLABLE_PACKER} not found. Not installed ? ... exit"
138
exit 1
139
fi
140
}
141
142
#-------------------------------------------------------------------------------
143
function _cleanup ()
144
{
145
(( DEFAULT_FLAG == 1 )) && return 0;
146
147
say ':: cleaning'
148
# pacman yay
149
rm -rf /var/cache/pacman/pkg/* "${ pacman-conf CacheDir; }*" \
150
> /dev/null 2>&1 || true
151
rm -rf ${TMP_PACKER_DIR} > /dev/null 2>&1 || true
152
# yay defaults
153
rm -rf ~/.cache/yay > /dev/null 2>&1 || true
154
rm -rf ~/.config/yay > /dev/null 2>&1 || true
155
# paru defaults
156
rm -rf ~/.cache/paru > /dev/null 2>&1 || true
157
rm -rf ~/.local/state/paru > /dev/null 2>&1 || true
158
}
159
160
#-------------------------------------------------------------------------------
161
#~function _get_available_sudo_method ()
162
#~{
163
#~command -v sudo > /dev/null 2>&1 && { SUDO_METHOD='sudo'; return 0; }
164
#~command -v doas > /dev/null 2>&1 && { SUDO_METHOD='doas'; return 0; }
165
#~SUDO_METHOD='run0'
166
#~}
167
168
#-------------------------------------------------------------------------------
169
function _prepare_folders_and_configs ()
170
{
171
# баг в pacman когда не удаляются папки c предыдущих разов /var/cache/pacman/pkg/download-JUwrO8
172
rm -rf /var/cache/pacman/pkg/* "${ pacman-conf CacheDir; }*" > /dev/null 2>&1 || true
173
174
(( DEFAULT_FLAG == 1 )) && return 0;
175
176
# строка всех папок. ENV_FOLDERS_ARRAY merge values
177
local _env_folders_str=${ENV_FOLDERS_ARRAY[*]}
178
# get string of folders merged key=val (environment variables). восклицательный знак перед переменной - ключ
179
for key in "${!ENV_FOLDERS_ARRAY[@]}"; do
180
ENV_FOLDERS_KEY_VALUE_STR+="$key=${ENV_FOLDERS_ARRAY[$key]} ";
181
done
182
183
mkdir -p ${_env_folders_str} # создаётся каждый раз при перевызовах со своими правами
184
185
# генерим временный makepkg.conf
186
cp -f /etc/makepkg.conf ${TMP_MAKEPKG_CONF_PATH}
187
echo "${MAKEPKG_CONF_OPTIONS}" | tee -a ${TMP_MAKEPKG_CONF_PATH} > /dev/null
188
189
# генерим временный pacman.conf с подстановкой своих значений
190
local _pacman_option
191
cp -f /etc/pacman.conf ${TMP_PACMAN_CONF_PATH}
192
for _pacman_option in ${PACMAN_CONF_OPTIONS_ARRAY[*]}; do
193
# удаляем по паттерну и сразу добавляем после [options]
194
sed -i "/${_pacman_option}/d; /\[options\]/a ${_pacman_option}" ${TMP_PACMAN_CONF_PATH}
195
done
196
}
197
198
#-------------------------------------------------------------------------------
199
function _run_packer ()
200
{
201
local _aur_helper_addon='--pacman /usr/bin/pacman' # for yay pacman direct call to avoid recall from /usr/local/bin
202
[[ ${CALLABLE_PACKER} == 'pacman' ]] && _aur_helper_addon='' # для pacman не нужно указывать (выдаст ошибку)
203
if (( DEFAULT_FLAG == 1 )); then
204
env DEFAULT_FLAG=1 ${PACKER_BIN} ${_aur_helper_addon} ${PACMAN_CMD_OPTIONS_ARRAY[*]} ${SCRIPT_ARGS}
205
else
206
env MAKEPKG_CONF=${TMP_MAKEPKG_CONF_PATH} ${ENV_FOLDERS_KEY_VALUE_STR} ${PACKER_BIN} ${_aur_helper_addon} ${PACMAN_CMD_OPTIONS_ARRAY[*]} ${SCRIPT_ARGS}
207
fi
208
}
209
210
#-------------------------------------------------------------------------------
211
# если вывод не в stdout то ничего не пишем, типа потом можно обработать
212
function say () { ! [[ -t 1 ]] && return 0; colorCode='0;36'; printf "\033[${colorCode}m%s\n\033[0m" "$*"; }
213
#-------------------------------------------------------------------------------
214
function warning() { ! [[ -t 1 ]] && return 0; colorCode='0;91'; printf "\033[${colorCode}m%s\n\033[0m" "$*"; }
215
#-------------------------------------------------------------------------------
216
__main__ "${@}"
217
EOF
218
#---- _script END --------------------------------------------------------------------------------
219
220
package() {
221
# create wrapper
222
mkdir -p "${pkgdir}/usr/lib/${pkgname}"
223
echo "${_script}" > "${pkgdir}/usr/lib/${pkgname}/${pkgname}.sh"
224
chmod +x "${pkgdir}/usr/lib/${pkgname}/${pkgname}.sh"
225
226
# create soft links
227
mkdir -p "${pkgdir}/usr/local/bin/"
228
ln -s "/usr/lib/${pkgname}/${pkgname}.sh" "${pkgdir}/usr/local/bin/pacman"
229
ln -s "/usr/lib/${pkgname}/${pkgname}.sh" "${pkgdir}/usr/local/bin/yay"
230
ln -s "/usr/lib/${pkgname}/${pkgname}.sh" "${pkgdir}/usr/local/bin/paru"
231
}
232
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-30 00:29:30 | Clean | 2 |
| 2026-10-29 21:53:30 | Low | 1 |