mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-02 21:33:56 +08:00
🦄 Sync 2026-06-17 03:41:10
This commit is contained in:
1 parent
aa76a8f79d
commit
08b7eb4ffb
79 files changed
+1354
-486
No files matched your search
+221
-56
@@ -10,25 +10,46 @@ if [ "${action:0:9}" = "AUTOCONF=" ]; then
|
||||
fi
|
||||
|
||||
IS_ROOT=/tmp/is-root
|
||||
DL_DIR=${IS_ROOT}/tmp/dl
|
||||
LISTS_DIR_O=/tmp/opkg-lists
|
||||
LISTS_DIR=${IS_ROOT}${LISTS_DIR_O}
|
||||
OPKG_CONF_DIR=${IS_ROOT}/etc/opkg
|
||||
OPKG_CONF_DIR_M=${IS_ROOT}/etc/opkg_m
|
||||
FEEDS_SERVER=https://istore.istoreos.com/repo
|
||||
FEEDS_SERVER_MIRRORS="https://repo.istoreos.com/repo"
|
||||
TMP_SELF_COPY=/var/run/cloned-is-opkg
|
||||
USE_APK=false
|
||||
DISABLE_MIRROR=false
|
||||
ARCH=`sed -n -e 's/^Architecture: *\([^ ]\+\) *$/\1/p' /rom/usr/lib/opkg/info/libc.control /usr/lib/opkg/info/libc.control 2>/dev/null | head -1`
|
||||
if [[ -s /etc/apk/arch ]]; then
|
||||
USE_APK=true
|
||||
fi
|
||||
|
||||
if $USE_APK; then
|
||||
LISTS_DIR=${IS_ROOT}/apk
|
||||
APK_CONF=${IS_ROOT}/etc/apk.conf
|
||||
FEEDS_SERVER=https://istore.istoreos.com/repo-apk
|
||||
FEEDS_SERVER_MIRRORS="https://repo.istoreos.com/repo-apk"
|
||||
ISTORE_INDEX=$FEEDS_SERVER/all/store/packages.adb
|
||||
META_DIR=/lib/apk
|
||||
|
||||
ARCH=`cat /rom/etc/apk/arch /etc/apk/arch 2>/dev/null | head -1`
|
||||
else
|
||||
LISTS_DIR_O=/tmp/opkg-lists
|
||||
LISTS_DIR=${IS_ROOT}${LISTS_DIR_O}
|
||||
OPKG_CONF_DIR=${IS_ROOT}/etc/opkg
|
||||
OPKG_CONF_DIR_M=${IS_ROOT}/etc/opkg_m
|
||||
FEEDS_SERVER=https://istore.istoreos.com/repo
|
||||
FEEDS_SERVER_MIRRORS="https://repo.istoreos.com/repo"
|
||||
ISTORE_INDEX=$FEEDS_SERVER/all/store/Packages.gz
|
||||
META_DIR=/usr/lib/opkg
|
||||
|
||||
ARCH=`sed -n -e 's/^Architecture: *\([^ ]\+\) *$/\1/p' /rom/usr/lib/opkg/info/libc.control /usr/lib/opkg/info/libc.control 2>/dev/null | head -1`
|
||||
fi
|
||||
|
||||
# for istore self upgrade
|
||||
ISTORE_PKG=luci-app-store
|
||||
ISTORE_DEP_PKGS="luci-lib-taskd luci-lib-xterm taskd"
|
||||
ISTORE_INDEX=https://istore.istoreos.com/repo/all/store/Packages.gz
|
||||
|
||||
NEWLINE=$'\n'
|
||||
|
||||
is_init() {
|
||||
mkdir -p ${DL_DIR} ${LISTS_DIR} ${IS_ROOT}/etc ${IS_ROOT}/var
|
||||
mkdir -p ${LISTS_DIR} ${IS_ROOT}/etc ${IS_ROOT}/var
|
||||
if $USE_APK; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
cat /etc/opkg.conf | grep -Fv lists_dir | grep -Fv check_signature > ${IS_ROOT}/etc/opkg.conf
|
||||
|
||||
@@ -44,35 +65,71 @@ is_init() {
|
||||
[ -e ${IS_ROOT}/var/lock ] || ln -s /var/lock ${IS_ROOT}/var/lock
|
||||
}
|
||||
|
||||
apk_wrap() {
|
||||
APK_CONFIG=${APK_CONF} apk "$@"
|
||||
}
|
||||
|
||||
opkg_wrap() {
|
||||
OPKG_CONF_DIR=${OPKG_CONF_DIR} opkg -f ${IS_ROOT}/etc/opkg.conf "$@"
|
||||
}
|
||||
|
||||
opkg_wrap_mirrors() {
|
||||
simple_apk_opkg() {
|
||||
local action="$1"
|
||||
shift
|
||||
if $USE_APK; then
|
||||
case "$action" in
|
||||
"install")
|
||||
action=add
|
||||
;;
|
||||
"remove")
|
||||
action=del
|
||||
;;
|
||||
esac
|
||||
apk_wrap "$action" "$@"
|
||||
else
|
||||
opkg_wrap "$action" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
do_in_mirrors() {
|
||||
local server
|
||||
local file
|
||||
if ! $DISABLE_MIRROR; then
|
||||
local newpath="/usr/libexec/istore/mirror-bin:$PATH"
|
||||
for server in $FEEDS_SERVER_MIRRORS ; do
|
||||
rm -rf "${OPKG_CONF_DIR_M}" 2>/dev/null
|
||||
mkdir -p "${OPKG_CONF_DIR_M}" 2>/dev/null
|
||||
ls "${OPKG_CONF_DIR}/" | while read; do
|
||||
file="$REPLY"
|
||||
if [ -f "${OPKG_CONF_DIR}/$file" -a "${file: -5}" = ".conf" ]; then
|
||||
sed "s#$FEEDS_SERVER/#$server/#g" "${OPKG_CONF_DIR}/$file" >"${OPKG_CONF_DIR_M}/$file"
|
||||
touch -r "${OPKG_CONF_DIR}/$file" "${OPKG_CONF_DIR_M}/$file" 2>/dev/null
|
||||
else
|
||||
cp -a "${OPKG_CONF_DIR}/$file" "${OPKG_CONF_DIR_M}/"
|
||||
fi
|
||||
done
|
||||
echo "Try mirror server $server"
|
||||
OPKG_CONF_DIR=${OPKG_CONF_DIR_M} opkg -f ${IS_ROOT}/etc/opkg.conf "$@" && return 0
|
||||
PATH="$newpath" IS_ORIG_SERVER=$FEEDS_SERVER IS_MIRROR_SERVER=$server "$@" && return 0
|
||||
done
|
||||
DISABLE_MIRROR=true
|
||||
fi
|
||||
echo "Try origin server $FEEDS_SERVER"
|
||||
OPKG_CONF_DIR=${OPKG_CONF_DIR} opkg -f ${IS_ROOT}/etc/opkg.conf "$@"
|
||||
"$@"
|
||||
}
|
||||
|
||||
apk_wrap_mirrors() {
|
||||
do_in_mirrors apk_wrap "$@"
|
||||
}
|
||||
|
||||
opkg_wrap_mirrors() {
|
||||
do_in_mirrors opkg_wrap "$@"
|
||||
}
|
||||
|
||||
do_install_in_mirrors() {
|
||||
if $USE_APK; then
|
||||
apk_wrap_mirrors add "$@"
|
||||
else
|
||||
opkg_wrap_mirrors install "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
do_upgrade_in_mirrors() {
|
||||
if $USE_APK; then
|
||||
apk_wrap_mirrors upgrade "$@"
|
||||
else
|
||||
opkg_wrap_mirrors upgrade "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
alias fcurl='curl -L --fail --show-error'
|
||||
|
||||
check_space() {
|
||||
@@ -91,14 +148,41 @@ update() {
|
||||
fi
|
||||
|
||||
echo "Fetch feed list for ${ARCH}"
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/meta.conf "${FEEDS_SERVER}/all/meta.conf" && \
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/all.conf "${FEEDS_SERVER}/all/isfeeds.conf" && \
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/arch.conf "${FEEDS_SERVER}/${ARCH}/isfeeds.conf" || \
|
||||
return 1
|
||||
if $USE_APK; then
|
||||
rm -rf ${IS_ROOT}/var/tmp ${IS_ROOT}/etc/arch ${IS_ROOT}/etc/istore.pem
|
||||
mkdir -p ${IS_ROOT}/var/tmp
|
||||
fcurl --no-progress-meter -o ${IS_ROOT}/var/tmp/meta.conf "${FEEDS_SERVER}/all/meta.conf" && \
|
||||
fcurl --no-progress-meter -o ${IS_ROOT}/var/tmp/all.conf "${FEEDS_SERVER}/all/isfeeds.conf" && \
|
||||
fcurl --no-progress-meter -o ${IS_ROOT}/var/tmp/arch.conf "${FEEDS_SERVER}/${ARCH}/isfeeds.conf" && \
|
||||
fcurl --no-progress-meter -o ${IS_ROOT}/etc/arch "${FEEDS_SERVER}/${ARCH}/archlist.conf" || \
|
||||
return 1
|
||||
echo "cache-dir $LISTS_DIR" > ${APK_CONF}
|
||||
cat ${IS_ROOT}/var/tmp/arch.conf ${IS_ROOT}/var/tmp/all.conf ${IS_ROOT}/var/tmp/meta.conf >> ${APK_CONF}
|
||||
local line
|
||||
while read -r line; do
|
||||
if [[ -n "$line" ]]; then
|
||||
grep -Fxq "$line" /etc/apk/arch || echo "$line" >> /etc/apk/arch
|
||||
fi
|
||||
done < ${IS_ROOT}/etc/arch
|
||||
sync /etc/apk/arch
|
||||
if [[ ! -s /etc/apk/keys/istore.pem && ! -s /etc/apk/keys/istore-tmp.pem ]]; then
|
||||
fcurl --no-progress-meter -o ${IS_ROOT}/etc/istore.pem "${FEEDS_SERVER}/istore-apk.pem" && \
|
||||
cp -a ${IS_ROOT}/etc/istore.pem /etc/apk/keys/istore-tmp.pem || \
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/meta.conf "${FEEDS_SERVER}/all/meta.conf" && \
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/all.conf "${FEEDS_SERVER}/all/isfeeds.conf" && \
|
||||
fcurl --no-progress-meter -o ${OPKG_CONF_DIR}/arch.conf "${FEEDS_SERVER}/${ARCH}/isfeeds.conf" || \
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Update feeds index"
|
||||
opkg -f ${IS_ROOT}/etc/opkg_o.conf --offline-root ${IS_ROOT} update
|
||||
|
||||
if $USE_APK; then
|
||||
apk_wrap update
|
||||
else
|
||||
opkg -f ${IS_ROOT}/etc/opkg_o.conf --offline-root ${IS_ROOT} update
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -110,9 +194,30 @@ update_if_outdate() {
|
||||
return 0
|
||||
}
|
||||
|
||||
get_online_version() {
|
||||
local index="$1"
|
||||
local pkg="$2"
|
||||
if $USE_APK; then
|
||||
apk --cache-dir $LISTS_DIR --cache-max-age 0 --repositories-file /dev/null --repository "$index" update >/dev/null 2>&1
|
||||
local ver=$(apk --cache-dir $LISTS_DIR --cache-max-age 0 --repositories-file /dev/null --repository "$index" query --available --fields version "$pkg" 2>/dev/null | grep -Fm1 'Version: ' | sed 's/^Version: //')
|
||||
echo "${ver:-0.2.0-r1}"
|
||||
else
|
||||
curl --connect-timeout 2 --max-time 5 -s "$index" | gunzip | grep -FA10 "Package: $pkg" | grep -Fm1 'Version: ' | sed 's/^Version: //'
|
||||
fi
|
||||
}
|
||||
|
||||
get_local_version() {
|
||||
local pkg="$1"
|
||||
if $USE_APK; then
|
||||
apk query --installed --fields version "$pkg" 2>/dev/null | grep -Fm1 'Version: ' | sed 's/^Version: //'
|
||||
else
|
||||
grep -Fm1 'Version: ' /usr/lib/opkg/info/$pkg.control 2>/dev/null | sed 's/^Version: //'
|
||||
fi
|
||||
}
|
||||
|
||||
check_self_upgrade() {
|
||||
local newest=`curl --connect-timeout 2 --max-time 5 -s ${ISTORE_INDEX} | gunzip | grep -FA10 "Package: ${ISTORE_PKG}" | grep -Fm1 'Version: ' | sed 's/^Version: //'`
|
||||
local current=`grep -Fm1 'Version: ' /usr/lib/opkg/info/${ISTORE_PKG}.control | sed 's/^Version: //'`
|
||||
local newest=`get_online_version "$ISTORE_INDEX" "$ISTORE_PKG"`
|
||||
local current=`get_local_version "$ISTORE_PKG"`
|
||||
if [ "v$newest" = "v" -o "v$current" = "v" ]; then
|
||||
echo "Check version failed!" >&2
|
||||
exit 255
|
||||
@@ -124,13 +229,13 @@ check_self_upgrade() {
|
||||
}
|
||||
|
||||
do_self_upgrade_0() {
|
||||
opkg_wrap upgrade ${ISTORE_DEP_PKGS} && opkg_wrap upgrade ${ISTORE_PKG}
|
||||
simple_apk_opkg upgrade ${ISTORE_DEP_PKGS} && simple_apk_opkg upgrade ${ISTORE_PKG}
|
||||
}
|
||||
|
||||
do_self_upgrade() {
|
||||
check_mtime || return 1
|
||||
local newest=`curl --connect-timeout 2 --max-time 5 -s ${ISTORE_INDEX} | gunzip | grep -FA10 "Package: ${ISTORE_PKG}" | grep -Fm1 'Version: ' | sed 's/^Version: //'`
|
||||
local current=`grep -Fm1 'Version: ' /usr/lib/opkg/info/${ISTORE_PKG}.control | sed 's/^Version: //'`
|
||||
local newest=`get_online_version "$ISTORE_INDEX" "$ISTORE_PKG"`
|
||||
local current=`get_local_version "$ISTORE_PKG"`
|
||||
if [ "v$newest" = "v" -o "v$current" = "v" ]; then
|
||||
echo "Check version failed!" >&2
|
||||
return 1
|
||||
@@ -139,7 +244,7 @@ do_self_upgrade() {
|
||||
echo "Already the latest version!" >&2
|
||||
return 1
|
||||
fi
|
||||
if opkg_wrap info ${ISTORE_PKG} | grep -qFm1 "Version: $newest"; then
|
||||
if $USE_APK || opkg_wrap info ${ISTORE_PKG} | grep -qFm1 "Version: $newest"; then
|
||||
do_self_upgrade_0 && return 0
|
||||
update_if_outdate || return 1
|
||||
do_self_upgrade_0
|
||||
@@ -150,7 +255,13 @@ do_self_upgrade() {
|
||||
}
|
||||
|
||||
check_mtime() {
|
||||
find ${OPKG_CONF_DIR}/arch.conf -mtime -1 2>/dev/null | grep -q . || update
|
||||
local file
|
||||
if $USE_APK; then
|
||||
file=${APK_CONF}
|
||||
else
|
||||
file=${OPKG_CONF_DIR}/arch.conf
|
||||
fi
|
||||
find "$file" -mtime -1 2>/dev/null | grep -q . || update
|
||||
}
|
||||
|
||||
wrapped_in_update() {
|
||||
@@ -160,6 +271,16 @@ wrapped_in_update() {
|
||||
eval "$@"
|
||||
}
|
||||
|
||||
refresh_installed() {
|
||||
local pkg
|
||||
for pkg in $@; do
|
||||
[[ $pkg == app-meta-* ]] || continue
|
||||
pkg="$META_DIR/meta/${pkg#app-meta-}.json"
|
||||
[[ -f "$pkg" ]] && touch "$pkg"
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
step_upgrade() {
|
||||
local pkg
|
||||
local pkgs=""
|
||||
@@ -172,10 +293,11 @@ step_upgrade() {
|
||||
fi
|
||||
done
|
||||
if [ -n "$pkgs" ]; then
|
||||
opkg_wrap_mirrors upgrade $pkgs || return 1
|
||||
do_upgrade_in_mirrors $pkgs || return 1
|
||||
fi
|
||||
if [ -n "$metapkg" ]; then
|
||||
opkg_wrap_mirrors upgrade $metapkg || return 1
|
||||
do_upgrade_in_mirrors $metapkg || return 1
|
||||
refresh_installed $metapkg
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
@@ -183,7 +305,7 @@ step_upgrade() {
|
||||
new_upgrade() {
|
||||
check_mtime || return 1
|
||||
local metapkg=`echo "$@" | sed 's/ /\n/g' | grep -F app-meta-`
|
||||
if [ -z "$metapkg" ] || opkg_wrap info $metapkg | grep -qF not-installed ; then
|
||||
if [[ -z "$metapkg" ]] || [[ -z "$(get_local_version $metapkg)" ]]; then
|
||||
true
|
||||
else
|
||||
update_if_outdate
|
||||
@@ -192,7 +314,11 @@ new_upgrade() {
|
||||
}
|
||||
|
||||
remove() {
|
||||
opkg_wrap --autoremove --force-removal-of-dependent-packages remove "$@"
|
||||
if $USE_APK; then
|
||||
apk_wrap del -r "$@"
|
||||
else
|
||||
opkg_wrap --autoremove --force-removal-of-dependent-packages remove "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
autoconf_to_env() {
|
||||
@@ -224,16 +350,29 @@ try_autoconf() {
|
||||
PATH="$CLEANPATH" /usr/libexec/istorea/${ISTORE_AUTOCONF}.sh
|
||||
}
|
||||
|
||||
|
||||
try_upgrade_depends() {
|
||||
local pkg="$1"
|
||||
if [[ $pkg == app-meta-* ]]; then
|
||||
local deps=$(grep '^Depends: ' /usr/lib/opkg/info/$pkg.control | busybox sed -e 's/^Depends: //' -e 's/,/\n/g' -e 's/ //g' | grep -vFw libc | xargs echo)
|
||||
[ -z "$deps" ] || opkg_wrap_mirrors install $deps
|
||||
local deps
|
||||
if $USE_APK; then
|
||||
deps=$(apk --repositories-file /dev/null info -R "$pkg" | tail +2 | grep -vFw libc | xargs echo)
|
||||
else
|
||||
deps=$(grep '^Depends: ' "/usr/lib/opkg/info/$pkg.control" | busybox sed -e 's/^Depends: //' -e 's/,/\n/g' -e 's/ //g' | grep -vFw libc | xargs echo)
|
||||
fi
|
||||
[ -z "$deps" ] || do_install_in_mirrors $deps
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
CMD_INSTALLED="opkg list-installed | cut -d' ' -f1 | sort -u"
|
||||
if $USE_APK; then
|
||||
CMD_INSTALLED="apk --repositories-file /dev/null info | cut -d' ' -f1 | sort -u"
|
||||
CMD_INSTALL="apk add --allow-untrusted"
|
||||
else
|
||||
CMD_INSTALLED="opkg list-installed | cut -d' ' -f1 | sort -u"
|
||||
CMD_INSTALL="opkg install"
|
||||
fi
|
||||
|
||||
dotrun() {
|
||||
local path="$1"
|
||||
[ -f "$path" ] || { echo "file not found: $path" >&2; return 1; }
|
||||
@@ -248,8 +387,8 @@ dotrun() {
|
||||
echo "Executing .run file"
|
||||
chmod 0755 "$path" && "$path"
|
||||
else
|
||||
echo "Installing .ipk file"
|
||||
opkg install "$path"
|
||||
echo "Installing pkg file"
|
||||
$CMD_INSTALL "$path"
|
||||
fi
|
||||
local RET=$?
|
||||
rm -f "$path"
|
||||
@@ -286,6 +425,13 @@ run_records() {
|
||||
echo "]"
|
||||
}
|
||||
|
||||
|
||||
if $USE_APK; then
|
||||
CMD_REMOVE="apk del"
|
||||
else
|
||||
CMD_REMOVE="opkg --autoremove remove"
|
||||
fi
|
||||
|
||||
unrun() {
|
||||
local id="$1"
|
||||
[ -s "/usr/share/istore/run-records/$id.txt" ] || { echo "record not found: $id" >&2; return 1; }
|
||||
@@ -295,9 +441,9 @@ unrun() {
|
||||
local round max_round=6
|
||||
for round in `seq 1 $max_round`; do
|
||||
if [ $round == $max_round ]; then
|
||||
opkg --autoremove remove `cat "/tmp/is-root/tmp/to_unrun_$id.txt"`
|
||||
$CMD_REMOVE `cat "/tmp/is-root/tmp/to_unrun_$id.txt"`
|
||||
else
|
||||
opkg --autoremove remove `cat "/tmp/is-root/tmp/to_unrun_$id.txt"` 2>/dev/null && break
|
||||
$CMD_REMOVE `cat "/tmp/is-root/tmp/to_unrun_$id.txt"` 2>/dev/null && break
|
||||
fi
|
||||
done
|
||||
sh -c "$CMD_INSTALLED" > "/tmp/is-root/tmp/post_unrun_$id.txt"
|
||||
@@ -327,13 +473,19 @@ usage() {
|
||||
echo " do_self_upgrade Upgrade iStore"
|
||||
echo " arch Show libc architecture"
|
||||
echo " opkg sys opkg wrap"
|
||||
echo " dotrun {path} install .run/.ipk"
|
||||
echo " run_records list .run/.ipk install records"
|
||||
echo " del_record {id} delete .run/.ipk install record"
|
||||
echo " unrun {id} Remove installed packages by .run/.ipk"
|
||||
echo " dotrun {path} install .run/.ipk/.apk"
|
||||
echo " run_records list .run/.ipk/.apk install records"
|
||||
echo " del_record {id} delete .run/.ipk/.apk install record"
|
||||
echo " unrun {id} Remove installed packages by .run/.ipk/.apk"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ "$action" = "do_self_upgrade" && "$0" != "$TMP_SELF_COPY" ]]; then
|
||||
echo "copy self $0 to $TMP_SELF_COPY when self upgrade"
|
||||
cp -af "$0" "$TMP_SELF_COPY" || exit 1
|
||||
exec "$TMP_SELF_COPY" do_self_upgrade "$@" || exit 1
|
||||
fi
|
||||
|
||||
is_init >/dev/null 2>&1
|
||||
|
||||
CLEANPATH="$PATH"
|
||||
@@ -352,7 +504,7 @@ case $action in
|
||||
;;
|
||||
"install")
|
||||
check_space
|
||||
wrapped_in_update opkg_wrap_mirrors install "$@" && try_upgrade_depends "$1" && try_autoconf
|
||||
wrapped_in_update do_install_in_mirrors "$@" && refresh_installed "$1" && try_upgrade_depends "$1" && try_autoconf
|
||||
;;
|
||||
"autoconf")
|
||||
try_autoconf
|
||||
@@ -364,10 +516,18 @@ case $action in
|
||||
remove "$@" || remove "$@"
|
||||
;;
|
||||
"info")
|
||||
opkg_wrap info "$@"
|
||||
if $USE_APK; then
|
||||
apk_wrap query "$@"
|
||||
else
|
||||
opkg_wrap info "$@"
|
||||
fi
|
||||
;;
|
||||
"list-upgradable")
|
||||
opkg_wrap list-upgradable
|
||||
if $USE_APK; then
|
||||
apk_wrap query --upgradable --summarize package '*'
|
||||
else
|
||||
opkg_wrap list-upgradable
|
||||
fi
|
||||
;;
|
||||
"check_self_upgrade")
|
||||
check_self_upgrade
|
||||
@@ -394,6 +554,11 @@ case $action in
|
||||
"unrun")
|
||||
unrun "$1"
|
||||
;;
|
||||
"link_meta")
|
||||
[[ -d "$META_DIR/meta" ]] || mkdir -p "$META_DIR/meta"
|
||||
mkdir -p /tmp/run/istore
|
||||
ln -sf "$META_DIR" /tmp/run/istore-meta
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
|
||||
@@ -7,6 +7,7 @@ boot() {
|
||||
local ARCH=`/bin/is-opkg arch`
|
||||
generate_store_id $ARCH
|
||||
generate_super_arch $ARCH
|
||||
/bin/is-opkg link_meta
|
||||
}
|
||||
|
||||
generate_store_id() {
|
||||
|
||||
@@ -9,4 +9,7 @@ if [ -z "`uci -q get istore.istore.hide_docker`" ] && ! which docker >/dev/null;
|
||||
EOF
|
||||
fi
|
||||
|
||||
# remove tmp keys that used for self-installation, which is not needed after installation
|
||||
rm -f /etc/apk/keys/istore-tmp.pem
|
||||
|
||||
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
|
||||
@@ -5,11 +5,12 @@
|
||||
IS_ROOT=/tmp/is-backup
|
||||
APP_LIST_FILE=/etc/istore/app.list
|
||||
BACKUP_CONFIG_FILE=/etc/config/istore
|
||||
USE_APK=false
|
||||
[[ -s /etc/apk/arch ]] && USE_APK=true
|
||||
|
||||
action=${1}
|
||||
shift
|
||||
|
||||
|
||||
is_init() {
|
||||
mkdir -p ${IS_ROOT}
|
||||
}
|
||||
@@ -90,23 +91,23 @@ ipk_build() {
|
||||
|
||||
# if arg is NULL, use light backup, otherwise use local backup
|
||||
backup() {
|
||||
[ -n "$1" ] && BACKUP_PATH=$1
|
||||
if [ -n "$1" ]; then
|
||||
if $USE_APK; then
|
||||
echo "does not support apk package manager" >&2
|
||||
exit 1
|
||||
fi
|
||||
BACKUP_PATH=$1
|
||||
fi
|
||||
|
||||
#1.add all istore self data to sysupgrade config file,
|
||||
#sysupgrade will backup/restore it auto when flash new firmware
|
||||
echo "/etc/.app_store.id" > /lib/upgrade/keep.d/luci-app-store
|
||||
cat /usr/lib/opkg/info/luci-app-store.list >> /lib/upgrade/keep.d/luci-app-store
|
||||
echo "/etc/rc.d/S45istore" >> /lib/upgrade/keep.d/luci-app-store
|
||||
echo "/etc/istore/uci-defaults_bak" >> /lib/upgrade/keep.d/luci-app-store
|
||||
echo "${APP_LIST_FILE}" >> /lib/upgrade/keep.d/luci-app-store
|
||||
echo "${BACKUP_CONFIG_FILE}" >> /lib/upgrade/keep.d/luci-app-store
|
||||
|
||||
#write user installed package list to file
|
||||
opkg_list_installed_packages "userinstalled" 2>/dev/null | sort -u > ${IS_ROOT}/user_installed_package.list
|
||||
|
||||
#write installed package list by istore feed to file
|
||||
cat ${IS_ROOT}/user_installed_package.list | \
|
||||
grep '^app-meta-' > ${IS_ROOT}/istore_installed_package.list
|
||||
if $USE_APK; then
|
||||
( cd /lib/apk/packages && ls *.list ) | grep '^app-meta-' | sed 's/.list$//' | sort -u > ${IS_ROOT}/istore_installed_package.list
|
||||
else
|
||||
#write user installed package list to file
|
||||
opkg_list_installed_packages "userinstalled" 2>/dev/null | sort -u > ${IS_ROOT}/user_installed_package.list
|
||||
#write installed package list by istore feed to file
|
||||
cat ${IS_ROOT}/user_installed_package.list | \
|
||||
grep '^app-meta-' > ${IS_ROOT}/istore_installed_package.list
|
||||
fi
|
||||
|
||||
#if no input backup path, only back app.list
|
||||
mkdir -p /etc/istore
|
||||
@@ -186,6 +187,10 @@ backup() {
|
||||
# if arg is NULL, use light backup, otherwise use local backup
|
||||
restore() {
|
||||
if [ -n "$1" ]; then
|
||||
if $USE_APK; then
|
||||
echo "does not support apk package manager" >&2
|
||||
exit 1
|
||||
fi
|
||||
BACKUP_PATH_FILE=$1
|
||||
else
|
||||
echo "install package by ${APP_LIST_FILE}"
|
||||
@@ -233,7 +238,7 @@ restore() {
|
||||
get_support_backup_features() {
|
||||
echo "light_backup"
|
||||
#istore custom img mean support local_backup
|
||||
if [ -f /etc/istore_img_flag ];then
|
||||
if ! $USE_APK; then
|
||||
echo "local_backup"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# ipkg-build -- construct a .ipk from a directory
|
||||
# Carl Worth <cworth@east.isi.edu>
|
||||
# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001
|
||||
# 2003-04-25 rea@sr.unh.edu
|
||||
# Updated to work on Familiar Pre0.7rc1, with busybox tar.
|
||||
# Note it Requires: binutils-ar (since the busybox ar can't create)
|
||||
# For UID debugging it needs a better "find".
|
||||
set -e
|
||||
|
||||
version=1.0
|
||||
FIND="$(command -v find)"
|
||||
FIND="${FIND:-$(command -v gfind)}"
|
||||
TAR="${TAR:-$(command -v tar)}"
|
||||
GZIP="$(command -v gzip)"
|
||||
|
||||
# try to use fixed source epoch
|
||||
if [ -n "$PKG_SOURCE_DATE_EPOCH" ]; then
|
||||
TIMESTAMP=$(date --date="@$PKG_SOURCE_DATE_EPOCH")
|
||||
elif [ -n "$SOURCE_DATE_EPOCH" ]; then
|
||||
TIMESTAMP=$(date --date="@$SOURCE_DATE_EPOCH")
|
||||
else
|
||||
TIMESTAMP=$(date)
|
||||
fi
|
||||
|
||||
ipkg_extract_value() {
|
||||
sed -e "s/^[^:]*:[[:space:]]*//"
|
||||
}
|
||||
|
||||
required_field() {
|
||||
field=$1
|
||||
|
||||
grep "^$field:" < $CONTROL/control | ipkg_extract_value
|
||||
}
|
||||
|
||||
pkg_appears_sane() {
|
||||
local pkg_dir=$1
|
||||
|
||||
local owd=$PWD
|
||||
cd $pkg_dir
|
||||
|
||||
PKG_ERROR=0
|
||||
pkg=`required_field Package`
|
||||
version=`required_field Version | sed 's/Version://; s/^.://g;'`
|
||||
arch=`required_field Architecture`
|
||||
|
||||
if echo $pkg | grep '[^a-zA-Z0-9_.+-]'; then
|
||||
echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2
|
||||
PKG_ERROR=1;
|
||||
fi
|
||||
|
||||
if [ -f $CONTROL/conffiles ]; then
|
||||
rm -f $CONTROL/conffiles.resolved
|
||||
|
||||
for cf in `$FIND $(sed -e "s!^/!$pkg_dir/!" $CONTROL/conffiles) -type f`; do
|
||||
echo "${cf#$pkg_dir}" >> $CONTROL/conffiles.resolved
|
||||
done
|
||||
|
||||
rm $CONTROL/conffiles
|
||||
if [ -f $CONTROL/conffiles.resolved ]; then
|
||||
mv $CONTROL/conffiles.resolved $CONTROL/conffiles
|
||||
chmod 0644 $CONTROL/conffiles
|
||||
fi
|
||||
fi
|
||||
|
||||
cd $owd
|
||||
return $PKG_ERROR
|
||||
}
|
||||
|
||||
resolve_file_mode_id() {
|
||||
local var=$1 type=$2 name=$3 id
|
||||
|
||||
case "$name" in
|
||||
root)
|
||||
id=0
|
||||
;;
|
||||
*[!0-9]*)
|
||||
id=$(sed -ne "s#^$type $name \\([0-9]\\+\\)\\b.*\$#\\1#p" "$TOPDIR/tmp/.packageusergroup" 2>/dev/null)
|
||||
;;
|
||||
*)
|
||||
id=$name
|
||||
;;
|
||||
esac
|
||||
|
||||
export "$var=$id"
|
||||
|
||||
[ -n "$id" ]
|
||||
}
|
||||
|
||||
###
|
||||
# ipkg-build "main"
|
||||
###
|
||||
file_modes=""
|
||||
usage="Usage: $0 [-v] [-h] [-m] <pkg_directory> [<destination_directory>]"
|
||||
while getopts "hvm:" opt; do
|
||||
case $opt in
|
||||
v ) echo $version
|
||||
exit 0
|
||||
;;
|
||||
h ) echo $usage >&2 ;;
|
||||
m ) file_modes=$OPTARG ;;
|
||||
\? ) echo $usage >&2
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
# continue on to process additional arguments
|
||||
|
||||
case $# in
|
||||
1)
|
||||
dest_dir=$PWD
|
||||
;;
|
||||
2)
|
||||
dest_dir=$2
|
||||
if [ "$dest_dir" = "." -o "$dest_dir" = "./" ] ; then
|
||||
dest_dir=$PWD
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo $usage >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
pkg_dir=$1
|
||||
|
||||
if [ ! -d $pkg_dir ]; then
|
||||
echo "*** Error: Directory $pkg_dir does not exist" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CONTROL is second so that it takes precedence
|
||||
CONTROL=
|
||||
[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
|
||||
if [ -z "$CONTROL" ]; then
|
||||
echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! pkg_appears_sane $pkg_dir; then
|
||||
echo >&2
|
||||
echo "ipkg-build: Please fix the above errors and try again." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tmp_dir=$dest_dir/IPKG_BUILD.$$
|
||||
mkdir $tmp_dir
|
||||
|
||||
echo $CONTROL > $tmp_dir/tarX
|
||||
cd $pkg_dir
|
||||
for file_mode in $file_modes; do
|
||||
case $file_mode in
|
||||
/*:*:*:*)
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: file modes must use absolute path and contain user:group:mode"
|
||||
echo "$file_mode"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
mode=${file_mode##*:}; path=${file_mode%:*}
|
||||
group=${path##*:}; path=${path%:*}
|
||||
user=${path##*:}; path=${path%:*}
|
||||
|
||||
if ! resolve_file_mode_id uid user "$user"; then
|
||||
echo "ERROR: unable to resolve uid of $user" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! resolve_file_mode_id gid group "$group"; then
|
||||
echo "ERROR: unable to resolve gid of $group" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chown "$uid:$gid" "$pkg_dir/$path"
|
||||
chmod "$mode" "$pkg_dir/$path"
|
||||
done
|
||||
$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz
|
||||
|
||||
installed_size=`ls -ln $tmp_dir/data.tar.gz | awk 'NR==1 {print $5}'`
|
||||
sed -i -e "s/^Installed-Size: .*/Installed-Size: $installed_size/" \
|
||||
$pkg_dir/$CONTROL/control
|
||||
|
||||
( cd $pkg_dir/$CONTROL && $TAR --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/control.tar.gz )
|
||||
rm $tmp_dir/tarX
|
||||
|
||||
echo "2.0" > $tmp_dir/debian-binary
|
||||
|
||||
pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
|
||||
rm -f $pkg_file
|
||||
( cd $tmp_dir && $TAR --format=gnu --sort=name -cf - --mtime="$TIMESTAMP" ./debian-binary ./data.tar.gz ./control.tar.gz | $GZIP -n - > $pkg_file )
|
||||
|
||||
rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
|
||||
rmdir $tmp_dir
|
||||
|
||||
echo "Packaged contents of $pkg_dir into $pkg_file"
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
newpath=$(echo ":$PATH:" | sed -e 's#:/usr/libexec/istore/mirror-bin:#:#g' -e 's/^:*//' -e 's/:*$//')
|
||||
[ -z "$newpath" ] && newpath="/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
|
||||
export PATH="$newpath"
|
||||
|
||||
# if url starts with $IS_ORIG_SERVER, replace it with $IS_MIRROR_SERVER
|
||||
if [ -n "$IS_ORIG_SERVER" ] && [ -n "$IS_MIRROR_SERVER" ]; then
|
||||
n=$#
|
||||
while [ "$n" -gt 0 ]; do
|
||||
i="$1"
|
||||
shift
|
||||
case "$i" in
|
||||
"$IS_ORIG_SERVER"/*.apk|\
|
||||
"$IS_ORIG_SERVER"/*.ipk)
|
||||
i="$IS_MIRROR_SERVER/${i#$IS_ORIG_SERVER/}"
|
||||
;;
|
||||
esac
|
||||
set -- "$@" "$i"
|
||||
n=$((n - 1))
|
||||
done
|
||||
fi
|
||||
export -n IS_ORIG_SERVER IS_MIRROR_SERVER
|
||||
|
||||
exec curl "$@"
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
newpath=$(echo ":$PATH:" | sed -e 's#:/usr/libexec/istore/mirror-bin:#:#g' -e 's/^:*//' -e 's/:*$//')
|
||||
[ -z "$newpath" ] && newpath="/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
|
||||
export PATH="$newpath"
|
||||
|
||||
# if url starts with $IS_ORIG_SERVER, replace it with $IS_MIRROR_SERVER
|
||||
if [ -n "$IS_ORIG_SERVER" ] && [ -n "$IS_MIRROR_SERVER" ]; then
|
||||
n=$#
|
||||
while [ "$n" -gt 0 ]; do
|
||||
i="$1"
|
||||
shift
|
||||
case "$i" in
|
||||
"$IS_ORIG_SERVER"/*.apk|\
|
||||
"$IS_ORIG_SERVER"/*.ipk)
|
||||
i="$IS_MIRROR_SERVER/${i#$IS_ORIG_SERVER/}"
|
||||
;;
|
||||
esac
|
||||
set -- "$@" "$i"
|
||||
n=$((n - 1))
|
||||
done
|
||||
fi
|
||||
export -n IS_ORIG_SERVER IS_MIRROR_SERVER
|
||||
|
||||
exec wget "$@"
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
for i in "$@"; do
|
||||
echo "$i" | grep -s -q "/etc/uci-defaults/" \
|
||||
&& mkdir -p /etc/istore/uci-defaults_bak \
|
||||
&& cp -f "$i" /etc/istore/uci-defaults_bak/
|
||||
done
|
||||
/bin/rm "$@"
|
||||
Reference in new issue
Block a user