# Maintainer: Moses Narrow # Maintainer: Rudi [KittyCash] _projectname=skycoin pkgname=skywire _pkgname=${pkgname} _githuborg=${_projectname} pkgdesc="Skywire Mainnet Node implementation. Develop Banch. Debian package" #set to native architecture with dpkg _pkgarch=$(dpkg --print-architecture) #Uncoment to select architecture - not working currently #_pkgarch=amd64 #_pkgarch=arm64 #_pkgarch=armhf #leave arch package as any arch=('any') #manually version for now _pkgver='0.3.0' #_tag_ver='v0.3.0' pkgver=${_pkgver} #pkgver='autogenerated' #pkgrel keeps getting reset when build is run _pkgrel=2 #pkgrel=2 pkgrel=${_pkgrel} _pkggopath="github.com/${_githuborg}/${_pkgname}" url="https://${_pkggopath}" license=() #make deps for every architecture are included here.. makedepends=('dpkg' 'git' 'go' 'musl' 'kernel-headers-musl') #'aarch64-linux-musl' 'arm-linux-gnueabihf-musl' 'skycoin-keyring') depends=() _debdeps="reprepro" #_debdeps="" _scripts="skywire-deb-scripts" #source=("git+${url}.git#branch=${BRANCH:-develop}" #build to needed commit because of develop branch instability source=("git+${url}.git#commit=d156980280fdb2ddfc8765ff77cdd55c0b7e9d9c" "${_scripts}.tar.gz") #'deb.PKGBUILD.sig' #skip the pgp checks for now as makepkg and yay handle it differently #'deb.PKGBUILD') sha256sums=('SKIP' '1e76ca2600fcbc5aad699aadf113589d8e7679907ad0b5f386fd30f2e44043fc') # 'SKIP' # 'SKIP') #validpgpkeys=('DE08F924EEE93832DABC642CA8DC761B1C0C0CFC') # Moses Narrow #tar -czvf skywire-deb-scripts.tar.gz skywire-deb-scripts #updpkgsums deb.PKGBUILD #omit this and manually version for now #pkgver() { #cd "${srcdir}/${_pkgname}" #local _version=$(git describe --abbrev=0 | tr --delete v) #local _version=${_version//-/_} #local _date=$(git log -1 --format="%cd" --date=short | sed s/-//g) #local _count=$(git rev-list --count HEAD) #local _commit=$(git rev-parse --short HEAD) #echo "${_pkgver}_${_date}.${_count}_${_commit}_${BRANCH:-develop}" # echo "${_pkgver}" #} prepare() { #skip signature verification for now because yay handles it differently than makepkg #verify PKGBUILD signature # gpg --verify ${srcdir}/deb.PKGBUILD.sig ${srcdir}/deb.PKGBUILD # https://wiki.archlinux.org/index.php/Go_package_guidelines mkdir -p ${srcdir}/go/src/github.com/${_githuborg}/ ${srcdir}/go/bin.${_pkgarch} ${srcdir}/go/apps.${_pkgarch} ln -rTsf ${srcdir}/${_pkgname} ${srcdir}/go/src/${_pkggopath} cd ${srcdir}/go/src/${_pkggopath}/ } build() { local GOPATH=${srcdir}/go local GOBIN=${GOPATH}/bin.${_pkgarch} local GOAPPS=${GOPATH}/apps.${_pkgarch} local GOOS=linux export CC=musl-gcc #static cross-compilation #[[ $_pkgarch == "amd64" ]] && local GOARCH=amd64 && local CC=musl-gcc #[[ $_pkgarch == "arm64" ]] && local GOARCH=arm64 && local CC=aarch64-linux-musl-gcc #[[ $_pkgarch == "armhf" ]] && local GOARCH=arm && local GOARM=6 && local CC=arm-linux-gnueabihf-musl-gcc #_ldflags=('-linkmode external -extldflags "-static" -buildid=') #${_defaults} ${_goarch} #create read only cache binary go build -trimpath -o $GOBIN/ ${srcdir}/${_scripts}/readonlycache.go #create the skywire binaries cd ${srcdir}/go/src/${_pkggopath} _cmddir=${srcdir}/go/src/${_pkggopath}/cmd #using go build for determinism _msg2 'building skychat binary' cd ${_cmddir}/apps/skychat go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOAPPS/ . _msg2 'building skysocks binary' cd ${_cmddir}/apps/skysocks go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOAPPS/ . _msg2 'building skysocks-client binary' cd ${_cmddir}/apps/skysocks-client go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOAPPS/ . _msg2 'building vpn-client binary' cd ${_cmddir}/apps/vpn-client go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOAPPS/ . _msg2 'building vpn-server binary' cd ${_cmddir}/apps/vpn-server go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOAPPS/ . _msg2 'building skywire-visor binary' cd ${_cmddir}/skywire-visor go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOBIN/ . _msg2 'building skywire-cli binary' cd ${_cmddir}/skywire-cli go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOBIN/ . _msg2 'building setup-node binary' cd ${_cmddir}/setup-node go build -trimpath --ldflags '-linkmode external -extldflags "-static" -buildid=' -o $GOBIN/ . #_msg2 'building hypervisor binary' #hypervisor has been combined with the visor #cd ${_cmddir}/hypervisor #go build -trimpath -ldflags '-extldflags ${LDFLAGS}' -ldflags=-buildid= -o $GOBIN/ . #binary transparency cd $GOBIN _msg2 'binary sha256sums' sha256sum $(ls) cd $GOAPPS sha256sum $(ls) #create control file for the debian package echo "Package: skywire" > ${srcdir}/${_pkgarch}.control echo "Version: ${_pkgver}-${_pkgrel}" >> ${srcdir}/${_pkgarch}.control echo "Priority: optional" >> ${srcdir}/${_pkgarch}.control echo "Section: web" >> ${srcdir}/${_pkgarch}.control echo "Architecture: ${_pkgarch}" >> ${srcdir}/${_pkgarch}.control echo "Depends: ${_debdeps}" >> ${srcdir}/${_pkgarch}.control echo "Maintainer: github.com/the-skycoin-project" >> ${srcdir}/${_pkgarch}.control echo "Description: ${pkgdesc}" >> ${srcdir}/${_pkgarch}.control #create control file for the hypervisorkey debian package echo "Package: hypervisorkey" > ${srcdir}/${_pkgarch}.hypervisorkey.control #TO DO: revise versioning for satellite package echo "Version: 1" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Priority: optional" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Section: web" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Architecture: ${_pkgarch}" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Depends: ${_pkgname}" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Maintainer: github.com/the-skycoin-project" >> ${srcdir}/${_pkgarch}.hypervisorkey.control echo "Description: package for the hypervisor key" >> ${srcdir}/${_pkgarch}.hypervisorkey.control } package() { _msg2 'creating dirs' #set up to create a .deb package _debpkgdir="${_pkgname}-${pkgver}-${_pkgrel}-${_pkgarch}" _pkgdir="${pkgdir}/${_debpkgdir}" _skydir="opt/skywire" _skyapps="${_skydir}/apps" _systemddir="etc/systemd/system" _skybin="${_skydir}/bin" mkdir -p ${_pkgdir}/usr/bin #this was done at my discretion for tls autoconfig mkdir -p ${_pkgdir}/${_skydir}/ssl #the skeleton of the hyperviorkey package; created with a script run on target machines mkdir -p ${_pkgdir}/${_skydir}/hypervisorkey/opt/${_pkgname} #other dirs must be created or the visor will create them at runtime with weird permissions mkdir -p ${_pkgdir}/${_skydir}/local mkdir -p ${_pkgdir}/${_skydir}/dmsgpty mkdir -p ${_pkgdir}/${_skydir}/${_pkgname} #needed? mkdir -p ${_pkgdir}/${_skydir}/transport_logs _msg2 'installing binaries' #loop to install the binaries _skywirebins=$( ls ${srcdir}/go/bin.${_pkgarch} ) for i in ${_skywirebins}; do _msg2 "$i" install -Dm755 ${srcdir}/go/bin.${_pkgarch}/${i} ${_pkgdir}/${_skybin}/${i} ln -rTsf ${_pkgdir}/${_skybin}/${i} ${_pkgdir}/usr/bin/${i} done _msg2 'installing apps' #loop to install the apps _skywireapps=$( ls ${srcdir}/go/apps.${_pkgarch} ) for i in ${_skywireapps}; do _msg2 "$i" install -Dm755 ${srcdir}/go/apps.${_pkgarch}/${i} ${_pkgdir}/${_skyapps}/${i} ln -rTsf ${_pkgdir}/${_skyapps}/${i} ${_pkgdir}/usr/bin/${i} done _msg2 'renaming skywire-visor to skywire' mv ${_pkgdir}/usr/bin/${_pkgname}-visor ${_pkgdir}/usr/bin/${_pkgname} _msg2 'installing systemd services' install -Dm644 ${srcdir}/${_scripts}/${_pkgname}.service ${_pkgdir}/${_systemddir}/${_pkgname}.service install -Dm644 ${srcdir}/${_scripts}/${_pkgname}-visor.service ${_pkgdir}/${_systemddir}/${_pkgname}-visor.service _msg2 'installing tls key and certificate generation scripts' #install -Dm755 ${srcdir}/${_pkgname}/static/skywire-manager-src/ssl/generate-1.sh ${pkgdir}/${_skydir}/ssl/generate.sh install -Dm755 ${srcdir}/${_scripts}/generate.sh ${_pkgdir}/${_skydir}/ssl/generate.sh ln -rTsf ${_pkgdir}/${_skydir}/ssl/generate.sh ${_pkgdir}/usr/bin/skywire-tls-gen #install -Dm644 ${srcdir}/${_pkgname}/static/skywire-manager-src/ssl/certificate.cnf ${pkgdir}/${_skydir}/ssl/certificate.cnf install -Dm644 ${srcdir}/${_scripts}/certificate.cnf ${_pkgdir}/${_skydir}/ssl/certificate.cnf _msg2 'installing `hypervisorkey` satellite .deb package build script' install -Dm755 ${srcdir}/${_scripts}/keypkg-gen.sh ${_pkgdir}/usr/bin/keypkg-gen _msg2 'installing `hypervisorkey` control file and postinst script' install -Dm755 ${srcdir}/${_pkgarch}.hypervisorkey.control ${_pkgdir}/${_skydir}/hypervisorkey/DEBIAN/control install -Dm755 ${srcdir}/${_scripts}/hypervisorkey.postinst ${_pkgdir}/${_skydir}/hypervisorkey/DEBIAN/postinst _msg2 'installing apt-repo-create script' install -Dm755 ${srcdir}/${_scripts}/apt-repo-create.sh ${_pkgdir}/usr/bin/apt-repo-create _msg2 'installing readonly-cache systemd service' #install -Dm755 ${srcdir}/readonlycache ${_pkgdir}/usr/bin/readonlycache ##this was installed from the GOBIN install -Dm644 ${srcdir}/${_scripts}/readonly-cache.service ${_pkgdir}/etc/systemd/system/readonly-cache.service _msg2 'installing the control file, postinst & postrm scripts' install -Dm755 ${srcdir}/${_pkgarch}.control ${_pkgdir}/DEBIAN/control install -Dm755 ${srcdir}/${_scripts}/postinst.sh ${_pkgdir}/DEBIAN/postinst install -Dm755 ${srcdir}/${_scripts}/postrm.sh ${_pkgdir}/DEBIAN/postrm _msg2 'creating the debian package' #create the debian package cd $pkgdir dpkg-deb --build ${_debpkgdir} mv *.deb ../../ #exit so the arch package doesn't get built exit } #check() { #_msg2 'testing `skywire-cli visor gen-config --help`' #${pkgdir}/opt/skywire/bin/skywire-cli visor gen-config --help #} _msg2() { (( QUIET )) && return local mesg=$1; shift printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" }