mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-29 06:35:07 +03:00

2. added SCTP protocol and schema support 3. added set of NAS models support (Asustor, ReadyNAS, Drobo, QNAP, WD, Synology, Terramaster) 4. moved to fc00::/7 private segment 5. added Windows, MacOS and Linux UI for peers edit and current status
436 lines
11 KiB
Bash
Executable file
436 lines
11 KiB
Bash
Executable file
#!/bin/bash
|
|
# Copyright (c) 2000-2015 Synology Inc. All rights reserved.
|
|
|
|
pkg_warn ()
|
|
{
|
|
local ret=$?;
|
|
echo "Error: $@" 1>&2;
|
|
return $?
|
|
}
|
|
pkg_log ()
|
|
{
|
|
local ret=$?;
|
|
echo "$@" 1>&2;
|
|
return $ret
|
|
}
|
|
pkg_get_string ()
|
|
{
|
|
local file="$1";
|
|
local sec="$2";
|
|
local key="$3";
|
|
local text="$(sed -n '/^\['$sec'\]/,/^'$key'/s/'$key'.*=[^"]*"\(.*\)"/\1/p' "$file")";
|
|
local product_name_original="_DISKSTATION_";
|
|
local product_name=$(pkg_get_product_name);
|
|
local os_name_original="_OSNAME_";
|
|
local os_name=$(pkg_get_os_name);
|
|
local idx=0;
|
|
shift 3;
|
|
for val in "$@";
|
|
do
|
|
text="${text/\{$idx\}/$val}";
|
|
let idx=1+$idx;
|
|
done;
|
|
echo "$text" | sed -e "s/${product_name_original}/${product_name}/g" | sed -e "s/${os_name_original}/${os_name}/g"
|
|
}
|
|
pkg_dump_info ()
|
|
{
|
|
local fields="package version maintainer maintainer_url distributor distributor_url arch exclude_arch model
|
|
adminprotocol adminurl adminport firmware dsmuidir dsmappname checkport allow_altport
|
|
startable helpurl report_url support_center install_reboot install_dep_packages install_conflict_packages install_dep_services
|
|
instuninst_restart_services startstop_restart_services start_dep_services silent_install silent_upgrade silent_uninstall install_type
|
|
checksum package_icon package_icon_120 package_icon_128 package_icon_144 package_icon_256 thirdparty support_conf_folder log_collector
|
|
support_aaprofile auto_upgrade_from offline_install precheckstartstop";
|
|
local f= lan= file= sec= key=;
|
|
for f in $fields;
|
|
do
|
|
if [ -n "${!f}" ]; then
|
|
echo $f=\"${!f}\";
|
|
fi;
|
|
done;
|
|
if [ -e "$UISTRING_PATH" -a "$description_sec" -a "$description_key" ]; then
|
|
sec=$description_sec;
|
|
key=$description_key;
|
|
for lan in $UISTRING_PATH/*;
|
|
do
|
|
lan=$(basename "$lan");
|
|
file="$UISTRING_PATH/$lan/strings";
|
|
if [ -r "$file" ]; then
|
|
echo description_$lan=\"$(pkg_get_string "$file" "$sec" "$key")\";
|
|
if [ "x$lan" = "xenu" ]; then
|
|
echo description=\"$(pkg_get_string "$file" "$sec" "$key")\";
|
|
fi;
|
|
fi;
|
|
done;
|
|
else
|
|
if [ "x" != "x$description" ]; then
|
|
echo "description=\"${description}\"";
|
|
fi;
|
|
fi;
|
|
if [ -e "$UISTRING_PATH" -a "$displayname_sec" -a "$displayname_key" ]; then
|
|
sec=$displayname_sec;
|
|
key=$displayname_key;
|
|
for lan in $UISTRING_PATH/*;
|
|
do
|
|
lan=$(basename "$lan");
|
|
file="$UISTRING_PATH/$lan/strings";
|
|
if [ -r "$file" ]; then
|
|
echo displayname_$lan=\"$(pkg_get_string "$file" "$sec" "$key")\";
|
|
if [ "x$lan" = "xenu" ]; then
|
|
echo displayname=\"$(pkg_get_string "$file" "$sec" "$key")\";
|
|
fi;
|
|
fi;
|
|
done;
|
|
else
|
|
if [ "x" != "x$displayname" ]; then
|
|
echo "displayname=\"${displayname}\"";
|
|
fi;
|
|
fi
|
|
}
|
|
plat_to_unified_plat() {
|
|
local plat="$1"
|
|
local unified_plat=
|
|
|
|
case "$plat" in
|
|
x86 | bromolow | cedarview | avoton )
|
|
unified_plat="x86 bromolow cedarview avoton"
|
|
;;
|
|
# alpine and alpine4k use same define.
|
|
alpine )
|
|
unified_plat="alpine"
|
|
;;
|
|
*)
|
|
unified_plat="$plat"
|
|
;;
|
|
esac
|
|
echo "$unified_plat"
|
|
}
|
|
|
|
get_var_from_envmak() {
|
|
return 1
|
|
local var="$1"
|
|
shift
|
|
local envmaks="$@"
|
|
local ret=
|
|
local defaultSearchPath="/env.mak /env32.mak"
|
|
|
|
for f in "${envmaks[@]}" $defaultSearchPath; do
|
|
if [ ! -r "$f" ]; then
|
|
continue
|
|
fi
|
|
|
|
ret=$(grep "^$var=" "$f" | cut -d= -f2)
|
|
|
|
if [ -n "$ret" ]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "$ret" ]; then
|
|
pkg_warn "get_var_from_envmak: can not extract $var from '[$envmaks $defaultSearchPath]'"
|
|
return 1
|
|
else
|
|
echo "$ret"
|
|
fi
|
|
}
|
|
|
|
pkg_get_platform ()
|
|
{
|
|
local arch=;
|
|
local PLATFORM_ABBR=$(get_var_from_envmak PLATFORM_ABBR "$1" 2> /dev/null) || return 1;
|
|
if [ -n "$PLATFORM_ABBR" ]; then
|
|
case "$PLATFORM_ABBR" in
|
|
6180)
|
|
arch="88f6180"
|
|
;;
|
|
6281)
|
|
arch="88f6281"
|
|
;;
|
|
816x)
|
|
arch="ti816x"
|
|
;;
|
|
ppc)
|
|
arch="powerpc"
|
|
;;
|
|
824x)
|
|
arch="ppc824x"
|
|
;;
|
|
853x)
|
|
arch="ppc853x"
|
|
;;
|
|
854x)
|
|
arch="ppc854x"
|
|
;;
|
|
x64)
|
|
arch="x86"
|
|
;;
|
|
*)
|
|
arch="$PLATFORM_ABBR"
|
|
;;
|
|
esac;
|
|
fi;
|
|
if [ -z "$arch" ]; then
|
|
local SYNO_PLATFORM=$(get_var_from_envmak SYNO_PLATFORM "$1") || return 1;
|
|
case "$SYNO_PLATFORM" in
|
|
MARVELL_88F6180)
|
|
arch="88f6180"
|
|
;;
|
|
MARVELL_88F6281)
|
|
arch="88f6281"
|
|
;;
|
|
TI_816X)
|
|
arch="ti816x"
|
|
;;
|
|
POWERPC)
|
|
arch="powerpc"
|
|
;;
|
|
PPC_824X)
|
|
arch="ppc824x"
|
|
;;
|
|
PPC_853X)
|
|
arch="ppc853x"
|
|
;;
|
|
PPC_854X)
|
|
arch="ppc854x"
|
|
;;
|
|
PPC_QORIQ)
|
|
arch="qoriq"
|
|
;;
|
|
X64)
|
|
arch="x86"
|
|
;;
|
|
BROMOLOW)
|
|
arch="bromolow"
|
|
;;
|
|
CEDARVIEW)
|
|
arch="cedarview"
|
|
;;
|
|
AVOTON)
|
|
arch="avoton"
|
|
;;
|
|
MARVELL_ARMADAXP)
|
|
arch="armadaxp"
|
|
;;
|
|
MARVELL_ARMADA370)
|
|
arch="armada370"
|
|
;;
|
|
MARVELL_ARMADA375)
|
|
arch="armada375"
|
|
;;
|
|
EVANSPORT)
|
|
arch="evansport"
|
|
;;
|
|
PPC_CATALINA)
|
|
arch="catalina"
|
|
;;
|
|
MINDSPEED_COMCERTO2K)
|
|
arch="comcerto2k"
|
|
;;
|
|
ALPINE)
|
|
arch="alpine"
|
|
;;
|
|
BROADCOM_NORTHSTARPLUS)
|
|
arch="northstarplus"
|
|
;;
|
|
STM_MONACO)
|
|
arch="monaco"
|
|
;;
|
|
HISILICON_HI3535)
|
|
arch="hi3535"
|
|
;;
|
|
MARVELL_ARMADA38X)
|
|
arch="armada38x"
|
|
;;
|
|
*)
|
|
arch=""
|
|
;;
|
|
esac;
|
|
fi;
|
|
echo "$arch"
|
|
}
|
|
pkg_get_spk_platform ()
|
|
{
|
|
local plat=$(pkg_get_platform "$1") || return 1;
|
|
local spk_plat=;
|
|
case "$plat" in
|
|
88f6281)
|
|
spk_plat="88f628x"
|
|
;;
|
|
*)
|
|
spk_plat="$plat"
|
|
;;
|
|
esac;
|
|
echo "$spk_plat"
|
|
}
|
|
pkg_make_package ()
|
|
{
|
|
local source_path=$1;
|
|
local dest_path=$2;
|
|
local package_name="package.tgz";
|
|
local temp_extractsize="extractsize_tmp";
|
|
local pkg_size=;
|
|
local tar_option="$(pkg_get_tar_option)";
|
|
if [ -z "$source_path" -o ! -d "$source_path" ]; then
|
|
pkg_warn "pkg_make_package: bad parameters, please set source dir";
|
|
return 1;
|
|
fi;
|
|
if [ -z "$dest_path" -o ! -d "$dest_path" ]; then
|
|
pkg_warn "pkg_make_package: bad parameters, please set destination dir";
|
|
return 1;
|
|
fi;
|
|
pkg_size=`du -sk "$source_path" | awk '{print $1}'`;
|
|
echo "${pkg_size}" >> "$dest_path/$temp_extractsize";
|
|
echo ls $source_path \| tar $tar_option "$dest_path/$package_name" -C "$source_path" -T /dev/stdin;
|
|
ls $source_path | tar $tar_option "$dest_path/$package_name" -C "$source_path" -T /dev/stdin
|
|
}
|
|
pkg_get_spk_name ()
|
|
{
|
|
__get_spk_name pkg_get_spk_platform $@
|
|
}
|
|
pkg_make_spk ()
|
|
{
|
|
local pack="tar cf";
|
|
local source_path=$1;
|
|
local dest_path=$2;
|
|
local info_path="$source_path/INFO";
|
|
local spk_name=$3;
|
|
local spk_arch=;
|
|
local temp_extractsize="extractsize_tmp";
|
|
if [ -z "$source_path" -o ! -d "$source_path" ]; then
|
|
pkg_warn "pkg_make_spk: bad parameters, please set source dir";
|
|
return 1;
|
|
fi;
|
|
if [ -z "$dest_path" -o ! -d "$dest_path" ]; then
|
|
pkg_warn "pkg_make_spk: bad parameters, please set destination dir";
|
|
return 1;
|
|
fi;
|
|
if [ ! -r "$info_path" ]; then
|
|
pkg_warn "pkg_make_spk: INFO '$info_path' is not existed";
|
|
return 1;
|
|
fi;
|
|
spk_name=${3:-`pkg_get_spk_name $info_path`};
|
|
pkg_size=`cat $source_path/$temp_extractsize`;
|
|
echo "extractsize=\"${pkg_size}\"" >> $info_path;
|
|
rm "$source_path/$temp_extractsize";
|
|
echo "toolkit_version=\"$DSM_BUILD_NUM\"" >> $info_path;
|
|
echo "create_time=\"$(date +%Y%m%d-%T)\"" >> $info_path;
|
|
pkg_log "creating package: $spk_name";
|
|
pkg_log "source: $source_path";
|
|
pkg_log "destination: $dest_path/$spk_name";
|
|
$pack "$dest_path/$spk_name" -C "$source_path" $(ls $source_path)
|
|
}
|
|
pkg_get_unified_platform ()
|
|
{
|
|
local plat=$(pkg_get_platform "$1") || return 1;
|
|
plat_to_unified_plat "$plat"
|
|
}
|
|
pkg_get_spk_unified_platform ()
|
|
{
|
|
local plat=$(pkg_get_platform "$1") || return 1;
|
|
local spk_unified_platform=;
|
|
case "$plat" in
|
|
88f6281)
|
|
spk_unified_platform="88f628x"
|
|
;;
|
|
x86 | bromolow | cedarview | avoton)
|
|
spk_unified_platform="x64"
|
|
;;
|
|
alpine)
|
|
spk_unified_platform="alpine"
|
|
;;
|
|
*)
|
|
spk_unified_platform="$plat"
|
|
;;
|
|
esac;
|
|
echo "$spk_unified_platform"
|
|
}
|
|
pkg_get_spk_unified_name ()
|
|
{
|
|
__get_spk_name pkg_get_spk_unified_platform $@
|
|
}
|
|
|
|
__get_spk_name() { #<info path>
|
|
local spk_name=
|
|
local platform_func="$1"
|
|
local info_path="${2:-$PKG_DIR/INFO}"
|
|
local package_name="$3"
|
|
|
|
. $info_path
|
|
|
|
# construct package name
|
|
if [ -z "$package" -o -z "$arch" -o -z "$version" ]; then
|
|
pkg_warn "pkg_make_spk: package, arch, version can not be empty"
|
|
return 1
|
|
fi
|
|
|
|
if [ "x$arch" = "xnoarch" ]; then
|
|
spk_arch="noarch"
|
|
elif ! spk_arch=$($platform_func); then
|
|
spk_arch="none"
|
|
fi
|
|
|
|
if [ "x$arch" = "xnoarch" ]; then
|
|
spk_arch=""
|
|
else
|
|
spk_arch="-"$spk_arch
|
|
fi
|
|
|
|
if [ -z "$package_name" ]; then
|
|
package_name="$package";
|
|
fi
|
|
|
|
if [ "${NOSTRIP}" == NOSTRIP ]; then
|
|
spk_name="$package_name$spk_arch-${version}_debug.spk"
|
|
else
|
|
spk_name="$package_name$spk_arch-$version.spk"
|
|
fi
|
|
echo $spk_name;
|
|
}
|
|
|
|
|
|
pkg_get_dsm_buildnum() { # [path of VERSION (default: )]
|
|
local version_file=${1:-/source/lnxsdk/init/etc/VERSION}
|
|
local dsm_build=
|
|
|
|
if [ ! -r "$version_file" ]; then
|
|
pkg_warn "pkg_get_dsm_buildnum: can not find version file '$version_file'"
|
|
pkg_warn "use default buildnum: 0"
|
|
echo 0
|
|
return 1
|
|
fi
|
|
|
|
if ! dsm_build=$(grep -s ^buildnumber "$version_file" | awk -F \" '{print $2}'); then
|
|
echo 0
|
|
return 1
|
|
fi
|
|
|
|
echo $(($dsm_build))
|
|
}
|
|
|
|
pkg_get_tar_option() {
|
|
local version_file="/PkgVersion"
|
|
|
|
if [ -r $version_file ] && [ "$(pkg_get_dsm_buildnum $version_file)" -ge 5943 ]; then
|
|
echo "cJf"
|
|
else
|
|
echo "czf"
|
|
fi
|
|
}
|
|
|
|
[ "$(caller)" != "0 NULL" ] && return 0
|
|
Usage() {
|
|
cat >&2 << EOF
|
|
Usage
|
|
$(basename $0) <action> [action options...]
|
|
Action
|
|
make_spk <source path> <dest path>
|
|
make_package <source path> <dest path>
|
|
EOF
|
|
exit 0
|
|
}
|
|
[ $# -eq 0 ] && Usage
|
|
PkgBuildAction=$1 ; shift
|
|
case "$PkgBuildAction" in
|
|
make_spk) pkg_make_spk "$@" ;;
|
|
make_package) pkg_make_package "$@" ;;
|
|
*) Usage ;;
|
|
esac
|