DEB自动化打包脚本 - Mr.Ding

DEB自动化打包脚本

天天记事 919 / 2021-03-30 16:55:52

直接贴脚本了

########################################

#!/bin/sh
bname=$1
bvers=$2
barch=$3
builddate=$(date "+%Y-%m-%d %H:%M:%S")


sudo echo 'Building...'

if [ "$bname" = "" -o "$bvers" = "" ]; then
echo "Useage:"
echo " umsp-build <name> <version> [x86_64|mips64|aarch64]"
exit
fi

if [ "$barch" = "" ]; then
barch="ALL"
elif ! [ "$barch" = "x86_64" -o "$barch" = "aarch64" -o "$barch" = "mips64" -o "$barch" = "amd64" ]; then
echo "not support arch '$barch'"
exit
fi

if [ "$barch" = "amd64" ]; then
barch="x86_64"
fi

baseurl="https://release.umsp.com.cn"
basedir="opt/deb-build/remote"
cachedir="$basedir/cache"
releasedir="$basedir/release"

if [ -d "$cachedir" ]; then
mkdir -p "$cachedir"
fi

if [ -d "$releasedir" ]; then
mkdir -p "$releasedir"
fi

function set_builder_info() {
tofile=$1
bname=$2
bvers=$3
barch=$4
bdate=$5

echo "Huws build detail" > $tofile
echo "-------------------------------------------" >> $tofile
echo "Name : $bname-$bvers-$barch" >> $tofile
echo "Version : $bvers" >> $tofile
echo "Arch : $barch" >> $tofile
echo "Datetime : $bdate" >> $tofile
echo "-------------------------------------------" >> $tofile

}

create_deb_control_file() {
metafile=$1
appname=$2
appvers=$3
apparch=$4
nowdate=`date "+%Y-%m-%d"`

echo "Package: $appname" > $metafile
echo "Version: $appvers-$nowdate" >> $metafile
echo "Section: Software" >> $metafile
echo "Priority: optional" >> $metafile
echo "Depends:" >> $metafile
echo "Suggests:" >> $metafile
if [ "$apparch" = "aarch64" ]; then
echo "Architecture: arm64" >> $metafile
elif [ "$apparch" = "mips64" ]; then
echo "Architecture: mips64" >> $metafile
else
echo "Architecture: i386" >> $metafile
fi
echo "Installed-Size: 4096" >> $metafile
echo "Maintainer: umsp group" >> $metafile
echo "Provides: www.umsp.cn" >> $metafile
echo "Description: $appname $appvers install package for linux" >> $metafile
echo "" >> $metafile
}

create_and_build_deb() {
appname=$1
appvers=$2
apparch=$3
srcdir=$4
workdir=$5
savedir=$6

ccdir="$workdir/$apparch/$appvers"
debfile="$savedir/$appname-$appvers-$apparch-linux.deb"

if [ -a "$debfile" ]; then
rm -rf "$debfile"
fi

if [ ! -d "$ccdir" ]; then
mkdir -p "$ccdir"
fi
if [ ! -d "$ccdir" ]; then
echo "Create build dir failed : $ccdir"
exit
fi

if [ -d "$ccdir/package" ]; then
rm -rf $ccdir/package
fi
if [ -d "$ccdir/package" ]; then
echo "Clear build dir failed: $ccdir/package"
exit
fi

mkdir -p "$ccdir/package"
mkdir -p "$ccdir/package/DEBIAN"
mkdir -p "$ccdir/package/opt"
metafile="$ccdir/package/DEBIAN/control"

create_deb_control_file \
$metafile \
$appname \
$appvers \
$apparch
set_builder_info "$srcdir/build.readme" $appname $appvers $apparch "$builddate"
cp -r "$srcdir/" "$ccdir/package/opt/"

sudo dpkg -b "$ccdir/package" "$debfile"
rm -rf "$workdir"
}



function gototask() {
appname=$1
appvers=$2
apparch=$3
filename="$appname-$appvers-$apparch-linux.tar.gz"
fileurl="$baseurl/$filename"
tmpdir="$cachedir/"`date +%Y%m%d%H%M%S`
cachefile="$tmpdir/$filename"

if [ -d "$tmpdir" ]; then
mkdir -p "$tmpdir"
fi

if [ -a "$cachefile" ]; then
rm -rf "$cachefile"
fi

echo "Build $appname-$appvers-$apparch-linux.deb"

echo "Fetching -> $fileurl ..."
wget -P "$tmpdir" $fileurl
# wget -nv -P "$tmpdir" $fileurl

if ! [ -s "$cachefile" ]; then
echo "download failed: $fileurl"
rm -rf "$tmpdir"
exit
fi

tar zxf $cachefile -C "$tmpdir"

if ! [ -d "$tmpdir/$appname-$appvers" ]; then
echo "expond failed: %cachefile"
rm -rf "$tmpdir"
exit
fi

workdir="$tmpdir/workspace"
mkdir -p "$workdir"

create_and_build_deb \
"$appname" \
"$appvers" \
"$apparch" \
"$tmpdir/$appname-$appvers" \
"$workdir" \
"$releasedir"

rm -rf "$tmpdir"
}


if [ "$barch" = "ALL" ]; then
gototask $bname $bvers "x86_64"
gototask $bname $bvers "aarch64"
gototask $bname $bvers "mips64"
echo "Build finished."
else
gototask $bname $bvers $barch
echo "Build finished."
fi









shell