mirror of
https://github.com/SynologyOpenSource/pkgscripts-ng.git
synced 2025-07-23 02:55:16 +00:00
255 lines
5.3 KiB
Bash
255 lines
5.3 KiB
Bash
#!/bin/bash
|
|
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.
|
|
|
|
if [ -z "$__INCLUDE_INSTALL__" ]; then
|
|
__INCLUDE_INSTALL__=defined
|
|
|
|
Source include/config
|
|
Source include/check
|
|
Source include/platforms
|
|
Source include/applyEnv
|
|
BUILD_TARGET=""
|
|
|
|
PlatformOpts=`AllPlatformOptionsComma`
|
|
DefaultLongArgs="${PlatformOpts}platform:,with-debug,help"
|
|
DefaultArgs="dhp:"
|
|
IsDebugBuild="N"
|
|
DebType="bin"
|
|
|
|
ParseDefaultInstallArgs(){
|
|
UnHandledOpt=
|
|
while [ -n $1 ]; do
|
|
IsPlatformOption $1
|
|
if [ $? -eq 0 ]; then
|
|
AskPlatform $1
|
|
else
|
|
case "$1" in
|
|
# platforms
|
|
"-p" | "--platform")
|
|
AskPlatform "--$2"
|
|
shift
|
|
;;
|
|
"-d" | "--with-debug")
|
|
export NOSTRIP="NOSTRIP"
|
|
IsDebugBuild="Y"
|
|
;;
|
|
"--help" | "-h")
|
|
Usage
|
|
exit 0
|
|
;;
|
|
"--")
|
|
# remaining are project names
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
[ -n "$UnHandledOpt" ] && UnHandledOpt="$UnHandledOpt $1" || UnHandledOpt="$1"
|
|
shift
|
|
if [ "$1" = '--' ]; then
|
|
shift
|
|
break
|
|
elif [[ "$1" =~ "-" ]]; then
|
|
continue
|
|
else
|
|
UnHandledOpt="$UnHandledOpt $1"
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
shift
|
|
done
|
|
|
|
InputProjs=$@
|
|
|
|
if [ -z "$BUILD_OPT" ]; then
|
|
# call again without parameters
|
|
# to prompt user interactively
|
|
AskPlatform
|
|
fi
|
|
}
|
|
|
|
SetupInstallEnv(){
|
|
local debugBuild=$1
|
|
|
|
SetupDSMBuildNumber
|
|
LoadPlatformRelated || exit 1
|
|
|
|
if [ "Y" = "$debugBuild" ]; then
|
|
TarBallDir=$DebugTarBallDir
|
|
DebType="debug"
|
|
fi
|
|
|
|
mkdir -p ${TarBallDir} $LogDir $TmpInstDir
|
|
[ -d "$DebPkgDir" ] || mkdir -p $DebPkgDir
|
|
}
|
|
|
|
UnifyInstallProjects() {
|
|
local projectList=
|
|
|
|
for proj in $@; do
|
|
projectList="${projectList} `basename ${proj}`"
|
|
done
|
|
|
|
echo $projectList
|
|
}
|
|
|
|
ExcludeProjects() {
|
|
local projList=$@
|
|
local retProjs=
|
|
|
|
retProjs=$(ExcludeList "$projList" "$(getPlatformExcludeProjs)")
|
|
BuildMachineOnly || retProjs=$(ExcludeList "$retProjs" ".*-virtual-protection dsm-Protection")
|
|
echo $retProjs
|
|
}
|
|
|
|
InstallProject() {
|
|
local proj=$1
|
|
local baseProj="${proj}"
|
|
local installScript=
|
|
|
|
cd $SourceDir/$baseProj
|
|
CheckErrorOut $? "Failed to cd $SourceDir/$baseProj"
|
|
if ! installScript=$(findInstallScript "${proj}"); then
|
|
ERROR "There is no install scripts for $proj"
|
|
return 1
|
|
fi
|
|
|
|
INFO "Execute install script: $installScript"
|
|
(. $installScript)
|
|
|
|
CheckProjectStatus install $proj > /dev/null
|
|
|
|
return $?
|
|
}
|
|
|
|
SetupProjInstallEnv() {
|
|
local proj=$1
|
|
|
|
if Is64BitProject "${proj}"; then
|
|
INFO "ENV" "Using 64bit environment."
|
|
ApplyInstallEnv "64"
|
|
else
|
|
INFO "ENV" "Using 32bit environment."
|
|
ApplyInstallEnv "32"
|
|
fi
|
|
|
|
rm -rf $TmpInstDir/*
|
|
}
|
|
|
|
CreateTarball() {
|
|
local proj=$1
|
|
local haveFile=`ls $TmpInstDir`
|
|
|
|
if [ ! -z "$haveFile" ]; then
|
|
echo ""
|
|
echo "Create ${proj}.txz ..."
|
|
( cd "$TmpInstDir"; XZ_OPT=-3 tar cJpvf "$TarBallDir/${proj}.txz" * )
|
|
echo "[Done]"
|
|
else
|
|
INFO "WARNING" "$TmpInstDir is empty!"
|
|
fi
|
|
|
|
}
|
|
|
|
InstallPreparePkgDir() # $1: Target Dir $2: Dir list
|
|
{
|
|
TargetDir="$1"
|
|
for dirmode in $2
|
|
do
|
|
DIR=`echo ${dirmode} | cut -f1 -d':'`
|
|
MODE=`echo ${dirmode} | cut -f2 -d':' -s`
|
|
if [ -n "${MODE}" ]; then
|
|
MODE_ARG="-m ${MODE}"
|
|
fi
|
|
echo "mkdir -p ${MODE_ARG} $TargetDir/${DIR}"
|
|
mkdir -p ${MODE_ARG} $TargetDir/${DIR}
|
|
done
|
|
}
|
|
|
|
InstallPkgFiles() # $1: Target Dir $2: Path $3: Default mode $4: FileList
|
|
{
|
|
PrefixDir="$1/$2"
|
|
DefMode="$3"
|
|
[ -n "$4" ] && mkdir -p "${PrefixDir}"
|
|
for file in $4
|
|
do
|
|
FileBase=$(echo "$file" | cut -f1 -d':')
|
|
FileDS=$(echo "$file" | cut -f2 -d':' -s)
|
|
if [ -z "$FileDS" ]; then
|
|
FileInst="$PrefixDir/$FileDS/$(basename "$FileBase")"
|
|
else
|
|
FileInst="$PrefixDir/$FileDS"
|
|
fi
|
|
|
|
if [ ! -f "$FileBase" ]; then
|
|
echo "Error: $FileBase not found!"
|
|
continue
|
|
fi
|
|
|
|
install -vm "$DefMode" "$FileBase" "$FileInst" | grep -- "->"
|
|
RetInstall=$?
|
|
if [ $RetInstall -ne 0 ]; then
|
|
echo "Error: [install -vm $DefMode $FileBase $FileInst], ret=$RetInstall"
|
|
continue
|
|
fi
|
|
|
|
file "${FileInst}" | grep ELF > /dev/null 2>&1
|
|
if [ $? -eq 0 -a "x$NOSTRIP" != "xNOSTRIP" ]; then
|
|
echo "Striping ${FileInst}"
|
|
${STRIP} -s --remove-section=.note --remove-section=.comment "$FileInst"
|
|
fi
|
|
done
|
|
}
|
|
|
|
InstallPrepareDir() # $1: Dir list
|
|
{
|
|
InstallPreparePkgDir "$TmpInstDir" "$@"
|
|
}
|
|
|
|
InstallFiles() # $1: Path $2: Default mode $3: FileList
|
|
{
|
|
InstallPkgFiles "$TmpInstDir" "$@"
|
|
}
|
|
|
|
DoInstall()
|
|
{
|
|
InstallPrepareDir "${INSTALL_DIRS}"
|
|
|
|
InstallFiles $LibDir 755 "${INSTALL_LIB}"
|
|
InstallFiles "/bin" 755 "${INSTALL_BIN}"
|
|
InstallFiles "/sbin" 755 "${INSTALL_SBIN}"
|
|
InstallFiles "/usr/bin" 755 "${INSTALL_USR_BIN}"
|
|
InstallFiles "/usr/sbin" 755 "${INSTALL_USR_SBIN}"
|
|
InstallFiles "/usr/syno/bin" 755 "${INSTALL_SYNO_BIN}"
|
|
InstallFiles "/usr/syno/sbin" 755 "${INSTALL_SYNO_SBIN}"
|
|
InstallFiles "/usr/syno/etc/rc.d" 755 "${INSTALL_RCD}"
|
|
InstallFiles "/etc" 644 "${INSTALL_ETC}"
|
|
InstallFiles "/etc/pam.d/" 644 "${INSTALL_PAM}"
|
|
InstallFiles "/usr/syno/etc" 644 "${INSTALL_SYNO_ETC}"
|
|
InstallFiles "/usr/local/bin" 755 "${INSTALL_LOCAL_BIN}"
|
|
InstallFiles "/usr/local/sbin" 755 "${INSTALL_LOCAL_SBIN}"
|
|
InstallFiles "/usr/local/etc/rc.d" 755 "${INSTALL_LOCAL_RCD}"
|
|
InstallFiles "/usr/local/etc" 644 "${INSTALL_LOCAL_ETC}"
|
|
}
|
|
|
|
is_support_apparmor() {
|
|
SupportAppArmorPlatform
|
|
}
|
|
|
|
_create_empty_tgz() {
|
|
touch ${TarBallDir}/${ThisProj}.tar
|
|
gzip ${TarBallDir}/${ThisProj}.tar
|
|
mv ${TarBallDir}/${ThisProj}.tar.gz ${TarBallDir}/${ThisProj}.tgz
|
|
}
|
|
|
|
_create_empty_txz() {
|
|
tar cJf "$TarBallDir/${ThisProj}.txz" --files-from /dev/null
|
|
}
|
|
|
|
SkipThisProject() {
|
|
_create_empty_txz
|
|
}
|
|
|
|
fi
|
|
# vim: ft=sh
|