Add new option REPOPUBLIC_FTP[*]

master
Dmitry Razumov 3 months ago
parent 0ab333917c
commit bd40524c9c
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -884,6 +884,7 @@ ubconfig_exec_system(){
REPOSITORY\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_01_repository "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_NET) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_02_repopublic_net "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_WEB\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_03_repopublic_web "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_FTP\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_03_repopublic_ftp "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_CACHE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_04_repopublic_cache "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_CACHE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_04_repopublic_cache "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
AUTOUPDATE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_autoupdate "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;

@ -318,24 +318,83 @@ exec_03_repopublic_web(){
fi
}
# TODO
#BusyBox v1.32.0-nethunter (2020-12-28 12:01:33 AEDT) multi-call binary.
#Usage: ftpd [-wvS] [-a USER] [-t N] [-T N] [DIR]
#FTP server. Chroots to DIR, if this fails (run by non-root), cds to it.
#Should be used as inetd service, inetd.conf line:
# 21 stream tcp nowait root ftpd ftpd /files/to/serve
#Can be run from tcpsvd:
# tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve
# -w Allow upload
# -A No login required, client access occurs under ftpd's UID
# -a USER Enable 'anonymous' login and map it to USER
# -v Log errors to stderr. -vv: verbose log
# -S Log errors to syslog. -SS: verbose log
# -t,-T N Idle and absolute timeout
# busybox tcpsvd -vE 0.0.0.0 21 ftpd -A /data/data/com.termux/files/home
## Опубликовать хранилище или репозиторий в виде локального FTP ресурса
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища.
## REPOPUBLIC_FTP[<path>|<path>:<repo1>,<repo2>,<...>]=enable|yes|disable|no|none:<port>:<map_username>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## <port> # Порт по которому доступен репозиторий. По умолчанию: 21. Не обязательный
## <map_username> # Пользователь от которого будет работать анонимный пользователь. Не обязательный.
## REPOPUBLIC_FTP[/home/storage]=enable
## REPOPUBLIC_FTP[/home/storage:repo-1,repo-2]=enable:21
## REPOPUBLIC_FTP[/home/storage:repo-1,repo-2]=enable:21:ftp
exec_03_repopublic_ftp(){
#REPOPUBLIC_WEB
true
kill_ftp_service(){
local SELECT_PORT=$1
if [[ -n ${SELECT_PORT} ]]; then
# Убить процесс с указанным каталогом
pkill -f "^busybox tcpsvd -vE 0.0.0.0 ${SELECT_PORT} ftpd .*"
else
# Убить все процессы
pkill -f "^busybox tcpsvd -vE 0.0.0.0 [[:digit:]]+ ftpd .*"
fi
}
mount_bind_storage(){
umount "${PATH_NEW_REPOPUBLIC_FTP_PATH}"/* 2>/dev/null
install -dm755 "${PATH_NEW_REPOPUBLIC_FTP_PATH}/pool"
mount --bind -o ro "${SRC_REPOPUBLIC_FTP_PATH_POOL}" "${PATH_NEW_REPOPUBLIC_FTP_PATH}/pool"
while IFS= read -u4 SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO; do
if [[ -d ${SRC_REPOPUBLIC_FTP_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO} ]]; then
install -dm755 "${PATH_NEW_REPOPUBLIC_FTP_PATH}/${SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO}"
mount --bind -o ro "${SRC_REPOPUBLIC_FTP_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO}" "${PATH_NEW_REPOPUBLIC_FTP_PATH}/${SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO}"
else
echo "WARNING: repository '${SRC_REPOPUBLIC_FTP_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_FTP_PATH_REPO}' not found!"
fi
done 4<<< ${SRC_REPOPUBLIC_FTP_PATH_REPOLIST//,/$'\n'}
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PATH_NEW_REPOPUBLIC_FTP_PATH="${ROOTFS}/srv/ftp/repopublic_ftp"
local PATH_LOG_REPOPUBLIC_FTP="${ROOTFS}/var/log/repopublic_ftp"
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#REPOPUBLIC_FTP[@]} != 0 ]]; then
local ARGS_BUSYBOX_FTPD=
[[ -d ${PATH_LOG_REPOPUBLIC_FTP} ]] || install -dm755 "${PATH_LOG_REPOPUBLIC_FTP}"
while IFS= read -u3 REPOPUBLIC_FTP_PATHS; do
local CREATE_BIND_STORAGE=
if [[ ${REPOPUBLIC_FTP_PATHS} =~ ":" ]]; then
# Указано хранилище и репозитории для публикации
SRC_REPOPUBLIC_FTP_PATH_POOL="${REPOPUBLIC_FTP_PATHS%:*}/pool"
SRC_REPOPUBLIC_FTP_PATH_REPOLIST=${REPOPUBLIC_FTP_PATHS#*:}
if [[ -d ${SRC_REPOPUBLIC_FTP_PATH_POOL} ]]; then
REPOPUBLIC_FTP_PATH=${PATH_NEW_REPOPUBLIC_FTP_PATH}
CREATE_BIND_STORAGE=yes
else
# Публикуемый каталог не содержит pool всех пакетов, публикуем каталог храниища
REPOPUBLIC_FTP_PATH=${REPOPUBLIC_FTP_PATHS}
fi
else
# Указано только хранилище
REPOPUBLIC_FTP_PATH=${REPOPUBLIC_FTP_PATHS}
fi
IFS=: read -r SELECT_STATUS SELECT_PORT SELECT_MAP_USERNAME NULL <<< "${REPOPUBLIC_FTP[${REPOPUBLIC_FTP_PATHS}]}"
if [[ ${SELECT_STATUS} == @("enable"|"yes") ]]; then
[[ -n ${CREATE_BIND_STORAGE} ]] && mount_bind_storage
[[ -n ${SELECT_MAP_USERNAME} ]] && SELECT_MAP_USERNAME="-a ${SELECT_MAP_USERNAME}"
kill_ftp_service ${SELECT_PORT:-21}
setsid busybox tcpsvd -vE 0.0.0.0 ${SELECT_PORT:-21} ftpd -vv ${SELECT_MAP_USERNAME} -A "${REPOPUBLIC_FTP_PATH}" 1>"${PATH_LOG_REPOPUBLIC_FTP}"/busybox_ftpd.log 2>&1 &
elif [[ ${SELECT_STATUS} == @("disable"|"no"|"none") ]]; then
kill_ftp_service ${SELECT_PORT:-21}
umount "${PATH_NEW_REPOPUBLIC_FTP_PATH}"/* 2>/dev/null
rm -rf "${PATH_NEW_REPOPUBLIC_FTP_PATH}"
fi
done 3< <(printf "%s\n" "${!REPOPUBLIC_FTP[@]}")
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
kill_ftp_service
umount "${PATH_NEW_REPOPUBLIC_FTP_PATH}"/* 2>/dev/null
rm -rf "${PATH_NEW_REPOPUBLIC_FTP_PATH}"
fi
}
## pacoloco (https://github.com/anatol/pacoloco)

@ -442,9 +442,11 @@ VERSION=
## Опубликовать хранилище или репозиторий в виде локального WEB ресурса
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища.
## Каталог лога /var/log/repopublic_web/
## REPOPUBLIC_WEB[<path>|<path>:<repo1>,<repo2>,<...>]=enable|yes|disable|no|none:listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path> # Путь до каталога хранилища, который будет опубликован. Запрещено в имене каталога использовать символ ':'
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## # Указанный каталог хранилица должен содержать каталоги указанных репозиториев
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## listing # Включить WEB обозреватель файлов. Не обязательный
@ -465,10 +467,12 @@ VERSION=
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
## Опубликовать хранилище или репозиторий в виде локального FTP ресурса
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища.
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища
## Каталог лога /var/log/repopublic_ftp/
## REPOPUBLIC_FTP[<path>|<path>:<repo1>,<repo2>,<...>]=enable|yes|disable|no|none:<port>:<map_username>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## <path> # Путь до каталога хранилища, который будет опубликован. Запрещено в имене каталога использовать символ ':'
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы.
## # Указанный каталог хранилица должен содержать каталоги указанных репозиториев
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## <port> # Порт по которому доступен репозиторий. По умолчанию: 21. Не обязательный

Loading…
Cancel
Save