pacman-tmpfs

CLEAN
maintainer ivanmara 1 votes scanned 2026-10-30 00:29:30.650963
View on AUR

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
2pkgname=pacman-tmpfs
3pkgver=2026.10.25
4pkgrel=1
5
6pkgdesc='Wrapper for pacman, yay, paru using tmpfs for caches.'
7url='tip://_See_PKGBUILD_for_usage_'
8arch=('any')
9license=('GPL')
10depends=('pacman')
11optdepends=('yay: Yet another yogurt. Pacman wrapper and AUR helper written in go.'
12 'paru-git: Feature packed AUR helper'
13 )
14options=('!debug')
15install=${pkgname}.install.sh
16
17#---- _usage --------------------------------------------------------------------------------------
18IFS= read -r -d '' _usage << 'EOF'
19 #
20 #
21 # USAGE:
22 # some text
23 ls -al /
24 #
25 #
26EOF
27echo "${_usage}" > /tmp/pacman-tmpfs_usage.txt
28#--------------------------------------------------------------------------------------------------
29
30#---- _script -------------------------------------------------------------------------------------
31IFS= read -r -d '' _script << 'EOF'
32#!/usr/bin/env bash
33set -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
44TMP_PACKER_DIR='/tmp/.packer_wrapper_tmp'
45TMP_PACKER_DIR=${ mktemp --dry-run ${TMP_PACKER_DIR}_${EUID}_XXXXXXXXXX; }
46TMP_PACMAN_CACHE_DIR=${TMP_PACKER_DIR}/pacman_cache/
47TMP_PACMAN_CONF_PATH=${TMP_PACKER_DIR}/pacman_tmp.conf
48TMP_PACMAN_LOG_PATH=${TMP_PACKER_DIR}/pacman_tmp.log
49TMP_MAKEPKG_CONF_PATH=${TMP_PACKER_DIR}/makepkg_tmp.conf
50
51# параметры запуска pacman (по умолчанию tmpfs)
52PACMAN_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)
60PACMAN_CMD_OPTIONS_DEFAULT_ARRAY=(
61 "--config /etc/pacman.conf"
62 '--color always'
63)
64
65# добавляемые опции во временный pacman.conf.
66# ПЕРЕРАБОТАТЬ: Как быть если составной параметр типа: ParallelDownloads = 5 ????
67# прям сдесь сделать комманду sed для замены ?
68PACMAN_CONF_OPTIONS_ARRAY=(
69 'Color'
70 'VerbosePkgLists'
71)
72
73MAKEPKG_CONF_OPTIONS='
74MAKEFLAGS="-j$(nproc)"
75# disable creating debug packages
76OPTIONS+=(!debug)
77# disable compression entirely. see: man makepkg.conf
78PKGEXT=".pkg.tar"
79SRCEXT=".src.tar"
80'
81
82# associated array of env folders to create
83declare -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
102DEFAULT_OPTION_STR='--default'
103declare -i DEFAULT_FLAG=${DEFAULT_FLAG:=0} # признак что запуск c default /etc/pacman.conf. может прилететь с перевывозом через env vars
104
105SCRIPT_ARGS=${*}
106CALLABLE_PACKER=${ basename ${0}; }
107
108#-------------------------------------------------------------------------------
109function __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#-------------------------------------------------------------------------------
133function _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#-------------------------------------------------------------------------------
143function _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#-------------------------------------------------------------------------------
169function _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#-------------------------------------------------------------------------------
199function _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 то ничего не пишем, типа потом можно обработать
212function say () { ! [[ -t 1 ]] && return 0; colorCode='0;36'; printf "\033[${colorCode}m%s\n\033[0m" "$*"; }
213#-------------------------------------------------------------------------------
214function warning() { ! [[ -t 1 ]] && return 0; colorCode='0;91'; printf "\033[${colorCode}m%s\n\033[0m" "$*"; }
215#-------------------------------------------------------------------------------
216__main__ "${@}"
217EOF
218#---- _script END --------------------------------------------------------------------------------
219
220package() {
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)SeverityRules
2026-10-30 00:29:30 Clean 2
2026-10-29 21:53:30 Low 1

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion