Skip to content

Commit

Permalink
Add spec file for rpms (#133)
Browse files Browse the repository at this point in the history
* Update debian package targets

* Add initial spec file

* Add more installed files

* Add systemd files

* Add man pages

* Add description

* Add socket directories

* Fix config file

* Add docs

* Add binaries

* make release as part of rpm build step

* Updates to libiothsm packages

* Only install service file

* Add group management to the pre/post

* Add libiothsm as a dependency

* Fix version information for rpm

* Fix groups

* Update for arm32

* Fix packages

* Add comment

* Remove comments, update path

* Device is not a tty

* Fix debian package build

* Add amd64 centos scripts

* Add --all to cargo build
  • Loading branch information
myagley authored Aug 10, 2018
1 parent 038c905 commit a090acb
Show file tree
Hide file tree
Showing 16 changed files with 639 additions and 31 deletions.
91 changes: 73 additions & 18 deletions edgelet/Makefile
Original file line number Diff line number Diff line change
@@ -1,27 +1,48 @@
SHELL=/bin/sh
TARGET=target/release
VERSION?=`cat version.txt`

_version:=$(shell cat version.txt)
VERSION?=${_version}
REVISION?=1

DEB_VERSION?=$(VERSION)
DEB_REVISION?=$(REVISION)

# Converts debian versioning to rpm version
# deb 1.0.1~dev100 ~> rpm 1.0.1-0.1.dev100
RPM_VERSION?=$(word 1,$(subst ~, , $(VERSION)))
_release=$(or $(and $(word 2,$(subst ~, ,$1)),0.${REVISION}.$(word 2,$(subst ~, ,$1))),${REVISION})
RPM_RELEASE?=$(call _release, ${VERSION})

PACKAGE_NAME=iotedge
PACKAGE="$(PACKAGE_NAME)-$(VERSION)"
PACKAGE="$(PACKAGE_NAME)-$(RPM_VERSION)"

prefix?=/usr
exec_prefix?=$(prefix)
bindir?=$(exec_prefix)/bin
libdir?=$(exec_prefix)/lib
sysconfdir?=/etc
localstatedir?=/var
runstatedir?=$(localstatedir)/run/$(PACKAGE_NAME)
datarootdir?=$(prefix)/share
datadir?=$(datarootdir)
docdir?=$(datarootdir)/doc/$(PACKAGE_NAME)
mandir?=$(datarootdir)/man
man1=$(mandir)/man1
man8=$(mandir)/man8
srcdir?=.
unitdir?=/lib/systemd/system

rpmbuilddir?=$(HOME)/rpmbuild

CARGOFLAGS=--manifest-path=$(srcdir)/Cargo.toml
DPKGFLAGS=-b -rfakeroot -us -uc -i
RPMBUILDFLAGS=-v -bb --clean

CARGO=cargo
GIT=git
GIT_ARCHIVEFLAGS=--prefix=$(PACKAGE)/ -o $(TARGET)/$(PACKAGE).tar.gz $(GIT_TAG)
GIT_TAG=HEAD
GZIP=gzip
INSTALL=install
INSTALL_DATA=$(INSTALL) -m 644
Expand All @@ -31,42 +52,70 @@ MKDIR_P=mkdir -p
SED=sed

all:
$(CARGO) build $(CARGOFLAGS)
VERSION=${VERSION} $(CARGO) build $(CARGOFLAGS)

release: $(TARGET)/iotedged $(TARGET)/iotedge
release:
VERSION=${VERSION} $(CARGO) build $(CARGOFLAGS) --release

$(TARGET)/iotedged:
$(CARGO) build $(CARGOFLAGS) --release
$(TARGET)/$(PACKAGE).tar.gz:
@echo Running git archive...
@$(GIT) archive --prefix=$(PACKAGE)/ -o $(TARGET)/$(PACKAGE).tar $(VERSION) 2> /dev/null || (echo 'Warning: $(VERSION) does not exist.' && $(GIT) archive --prefix=$(PACKAGE)/ -o $(TARGET)/$(PACKAGE).tar HEAD)
@echo Running git archive submodules...
p=`pwd` && (echo .; cd .. && git submodule foreach --recursive) | while read entering path; do \
cd $$p; \
temp="$${path%\'}"; \
temp="$${temp#\'edgelet/}"; \
path=$$temp; \
[ "$$path" = "" ] && continue; \
(cd $$path && $(GIT) archive --prefix=$(PACKAGE)/$$path/ HEAD > $$p/$(TARGET)/tmp.tar && tar --concatenate --file=$$p/$(TARGET)/$(PACKAGE).tar $$p/$(TARGET)/tmp.tar && rm $$p/$(TARGET)/tmp.tar); \
done
gzip -f $(TARGET)/$(PACKAGE).tar
rm -f $(TARGET)/$(PACKAGE).tar

$(TARGET)/iotedge:
$(CARGO) build $(CARGOFLAGS) --release
dist: $(TARGET)/$(PACKAGE).tar.gz

package: release
deb: release
$(INSTALL_PROGRAM) -D $(TARGET)/iotedged $(TARGET)/$(PACKAGE)/iotedged
$(INSTALL_PROGRAM) -D $(TARGET)/iotedge $(TARGET)/$(PACKAGE)/iotedge
$(INSTALL_DATA) -D $(srcdir)/contrib/systemd/debian/iotedge.service $(TARGET)/$(PACKAGE)/debian/iotedge.service
$(INSTALL_DATA) -D $(srcdir)/contrib/systemd/debian/iotedge.socket $(TARGET)/$(PACKAGE)/debian/iotedge.socket
$(INSTALL_DATA) -D $(srcdir)/contrib/systemd/debian/iotedge.mgmt.socket $(TARGET)/$(PACKAGE)/debian/iotedge.mgmt.socket
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man1/iotedge.1 $(TARGET)/$(PACKAGE)/man/iotedge.1
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man8/iotedged.8 $(TARGET)/$(PACKAGE)/man/iotedged.8
$(INSTALL_DATA) -D $(srcdir)/contrib/config/linux/config.yaml $(TARGET)/$(PACKAGE)/etc/iotedge/config.yaml
$(INSTALL_DATA) -D $(srcdir)/contrib/config/linux/debian/config.yaml $(TARGET)/$(PACKAGE)/etc/iotedge/config.yaml
$(INSTALL_DATA) -D $(srcdir)/contrib/config/linux/logrotate $(TARGET)/$(PACKAGE)/etc/logrotate.d/iotedge
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/LICENSE $(TARGET)/$(PACKAGE)$(docdir)/LICENSE
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/ThirdPartyNotices $(TARGET)/$(PACKAGE)$(docdir)/ThirdPartyNotices
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/trademark $(TARGET)/$(PACKAGE)$(docdir)/trademark

deb: package
cp -R $(srcdir)/contrib/debian $(TARGET)/$(PACKAGE)
$(SED) "s/@version@/${VERSION}/g; s/@revision@/${REVISION}/g;" $(srcdir)/contrib/debian/changelog > $(TARGET)/$(PACKAGE)/debian/changelog
$(SED) "s/@version@/${DEB_VERSION}/g; s/@revision@/${DEB_REVISION}/g;" $(srcdir)/contrib/debian/changelog > $(TARGET)/$(PACKAGE)/debian/changelog
cd $(TARGET)/$(PACKAGE) && dpkg-buildpackage $(DPKGFLAGS)

rpm:
cp $(TARGET)/$(PACKAGE).tar.gz $(rpmbuilddir)/SOURCES/
$(SED) "s/@version@/${RPM_VERSION}/g; s/@release@/${RPM_RELEASE}/g;" $(srcdir)/contrib/centos/iotedge.spec > $(rpmbuilddir)/SPECS/iotedge.spec
rpmbuild $(RPMBUILDFLAGS) $(rpmbuilddir)/SPECS/iotedge.spec

install: release
$(INSTALL_PROGRAM) -D -s $(TARGET)/iotedged $(DESTDIR)$(bindir)/iotedged
$(INSTALL_PROGRAM) -D -s $(TARGET)/iotedge $(DESTDIR)$(bindir)/iotedge
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man1/iotedge.1 $(DESTDIR)$(man1)/iotedge.1
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man8/iotedged.8 $(DESTDIR)$(man8)/iotedged.8
$(INSTALL_PROGRAM) -D $(TARGET)/iotedged $(DESTDIR)$(bindir)/iotedged
$(INSTALL_PROGRAM) -D $(TARGET)/iotedge $(DESTDIR)$(bindir)/iotedge
$(INSTALL_DATA) -D $(srcdir)/contrib/config/linux/config.yaml $(DESTDIR)$(sysconfdir)/iotedge/config.yaml
$(INSTALL_DATA) -D $(srcdir)/contrib/config/linux/logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/iotedge
$(INSTALL_DATA) -D $(srcdir)/contrib/systemd/iotedge.service $(DESTDIR)$(unitdir)/iotedge.service
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man1/iotedge.1 $(DESTDIR)$(man1)/iotedge.1
$(GZIP) $(DESTDIR)$(man1)/iotedge.1
$(INSTALL_DATA) -D $(srcdir)/contrib/man/man8/iotedged.8 $(DESTDIR)$(man8)/iotedged.8
$(GZIP) $(DESTDIR)$(man8)/iotedged.8
$(INSTALL) -d -m 0755 $(DESTDIR)$(localstatedir)/lib/iotedge
$(INSTALL) -d -m 0755 $(DESTDIR)$(localstatedir)/log/iotedge
$(INSTALL) -d -m 0755 $(DESTDIR)$(runstatedir)
$(INSTALL) -m 0660 /dev/null $(DESTDIR)$(runstatedir)/mgmt.sock
$(INSTALL) -m 0666 /dev/null $(DESTDIR)$(runstatedir)/workload.sock
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/LICENSE $(DESTDIR)$(docdir)/LICENSE
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/ThirdPartyNotices $(DESTDIR)$(docdir)/ThirdPartyNotices
$(INSTALL_DATA) -D $(srcdir)/contrib/docs/trademark $(DESTDIR)$(docdir)/trademark
$(GZIP) $(DESTDIR)$(docdir)/LICENSE
$(GZIP) $(DESTDIR)$(docdir)/ThirdPartyNotices

uninstall:
rm -f $(DESTDIR)$(bindir)/iotedged
Expand All @@ -82,4 +131,10 @@ uninstall:
clean:
rm -rf $(TARGET)

.PHONY: all clean deb install package uninstall
version:
@echo "deb version: ${DEB_VERSION}"
@echo "deb revision: ${DEB_REVISION}"
@echo "rpm version: ${RPM_VERSION}"
@echo "rpm release: ${RPM_RELEASE}"

.PHONY: all clean deb dist install rpm uninstall version
54 changes: 54 additions & 0 deletions edgelet/build/linux/centos/amd64/package-iotedged.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/bin/bash

set -e

# Get directory of running script
DIR=$(cd "$(dirname "$0")" && pwd)

BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../../../..}
PROJECT_ROOT=${BUILD_REPOSITORY_LOCALPATH}/edgelet
BUILD_DIR_REL="target/release"
BUILD_DIR="$PROJECT_ROOT/$BUILD_DIR_REL"

CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo/"}
RUSTUP_HOME=${RUSTUP_HOME:-"$HOME/.rustup"}
IMAGE="edgebuilds.azurecr.io/centos-build:7.5-1"

REVISION=${REVISION:-1}
DEFAULT_VERSION=$(cat $PROJECT_ROOT/version.txt)
VERSION="${VERSION:-$DEFAULT_VERSION}"

docker pull "$IMAGE"

run_command()
{
echo "$1"
docker \
run \
--rm \
-e "USER=root" \
-e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/cargo/bin" \
-e "RUSTUP_HOME=/rustup" \
-v "$PROJECT_ROOT/target:/target" \
-v "$BUILD_REPOSITORY_LOCALPATH:/project" \
-v "$CARGO_HOME:/cargo" \
-v "$RUSTUP_HOME:/rustup" \
-i "$IMAGE" \
sh -c "$1"
}

mkdir -p $BUILD_DIR
cd $PROJECT_ROOT && make dist TARGET=$BUILD_DIR_REL VERSION=${VERSION} REVISION=${REVISION}

COMMAND="
mkdir -p /${BUILD_DIR_REL}/rpmbuild && \
cd /${BUILD_DIR_REL}/rpmbuild && \
mkdir -p RPMS SOURCES SPECS SRPMS BUILD && \
cd /project/edgelet && \
make rpm rpmbuilddir=/${BUILD_DIR_REL}/rpmbuild \
TARGET=/${BUILD_DIR_REL} \
VERSION=${VERSION} \
REVISION=${REVISION} \
CARGOFLAGS=\"--manifest-path=/project/edgelet/Cargo.toml --all\" \
RPMBUILDFLAGS='-v -bb --clean --define \"_topdir /${BUILD_DIR_REL}/rpmbuild\"'"
run_command "$COMMAND"
50 changes: 50 additions & 0 deletions edgelet/build/linux/centos/amd64/package-libiothsm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

set -e

# Get directory of running script
DIR=$(cd "$(dirname "$0")" && pwd)

BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../../../..}
PROJECT_ROOT=${BUILD_REPOSITORY_LOCALPATH}/edgelet

BUILD_DIR_REL="target/hsm/build/amd64"
BUILD_DIR="$PROJECT_ROOT/$BUILD_DIR_REL"
IMAGE="edgebuilds.azurecr.io/centos-build:7.5-1"

PACKAGE_NAME="libiothsm-std"
REVISION=${REVISION:-1}
DEFAULT_VERSION=$(cat $PROJECT_ROOT/version.txt)
VERSION="${VERSION:-$DEFAULT_VERSION}"

# Converts debian versioning to rpm version
# deb 1.0.1~dev100 ~> rpm 1.0.1-0.1.dev100

RPM_VERSION=`echo "$VERSION" | cut -d"~" -f1`
RPM_TAG=`echo "$VERSION" | cut -s -d"~" -f2`
if [[ ! -z ${RPM_TAG} ]]; then
RPM_RELEASE="0.${REVISION}.${RPM_TAG}"
else
RPM_RELEASE="${REVISION}"
fi

docker pull "$IMAGE"

run_command()
{
echo "$1"
docker \
run \
--rm \
-e "USER=root" \
-e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/toolchain/arm-linux-gnueabihf/bin:/cargo/bin" \
-v "$PROJECT_ROOT/target:/target" \
-v "$PROJECT_ROOT:/project" \
-i "$IMAGE" \
sh -c "$1"
}

mkdir -p $BUILD_DIR
run_command "cd /$BUILD_DIR_REL && cmake -DCPACK_PACKAGE_VERSION=\"$RPM_VERSION\" -DCPACK_RPM_PACKAGE_RELEASE=\"$RPM_RELEASE\" -DBUILD_SHARED=On -Drun_unittests=Off -Duse_emulator=Off -DCMAKE_BUILD_TYPE=Release -Duse_default_uuid=On -DCPACK_GENERATOR=RPM /project/hsm-sys/azure-iot-hsm-c/"

run_command "cd /$BUILD_DIR_REL && make package"
58 changes: 58 additions & 0 deletions edgelet/build/linux/centos/arm32v7/package-iotedged.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/bin/bash

set -e

# Get directory of running script
DIR=$(cd "$(dirname "$0")" && pwd)

BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../../../..}
PROJECT_ROOT=${BUILD_REPOSITORY_LOCALPATH}/edgelet
BUILD_DIR_REL="target/armv7-unknown-linux-gnueabihf/release"
BUILD_DIR="$PROJECT_ROOT/$BUILD_DIR_REL"

CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo/"}
RUSTUP_HOME=${RUSTUP_HOME:-"$HOME/.rustup"}
IMAGE="edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:centos_7.5-1"

REVISION=${REVISION:-1}
DEFAULT_VERSION=$(cat $PROJECT_ROOT/version.txt)
VERSION="${VERSION:-$DEFAULT_VERSION}"

docker pull "$IMAGE"

run_command()
{
echo "$1"
docker \
run \
--rm \
-e "USER=root" \
-e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/toolchain/arm-linux-gnueabihf/bin:/toolchain/bin:/cargo/bin" \
-e "RUSTUP_HOME=/rustup" \
-v "$PROJECT_ROOT/target:/target" \
-v "$BUILD_REPOSITORY_LOCALPATH:/project" \
-v "$CARGO_HOME:/cargo" \
-v "$RUSTUP_HOME:/rustup" \
-i "$IMAGE" \
sh -c "$1"
}

# Ensure the armv7 toolchain is installed
rustup target add armv7-unknown-linux-gnueabihf
rustup component add rust-src

mkdir -p $BUILD_DIR
cd $PROJECT_ROOT && make dist TARGET=$BUILD_DIR_REL VERSION=${VERSION} REVISION=${REVISION}

COMMAND="
mkdir -p /${BUILD_DIR_REL}/rpmbuild && \
cd /${BUILD_DIR_REL}/rpmbuild && \
mkdir -p RPMS SOURCES SPECS SRPMS BUILD && \
cd /project/edgelet && \
make rpm rpmbuilddir=/${BUILD_DIR_REL}/rpmbuild \
TARGET=/${BUILD_DIR_REL} \
VERSION=${VERSION} \
REVISION=${REVISION} \
CARGOFLAGS=\"--manifest-path=/project/edgelet/Cargo.toml --target armv7-unknown-linux-gnueabihf --all\" \
RPMBUILDFLAGS='-v -bb --clean --target armv7hl --define \"_topdir /${BUILD_DIR_REL}/rpmbuild\"'"
run_command "$COMMAND"
50 changes: 50 additions & 0 deletions edgelet/build/linux/centos/arm32v7/package-libiothsm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

set -e

# Get directory of running script
DIR=$(cd "$(dirname "$0")" && pwd)

BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../../../..}
PROJECT_ROOT=${BUILD_REPOSITORY_LOCALPATH}/edgelet

BUILD_DIR_REL="target/hsm/build/arm32v7"
BUILD_DIR="$PROJECT_ROOT/$BUILD_DIR_REL"
IMAGE="edgebuilds.azurecr.io/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf:centos_7.5-1"

PACKAGE_NAME="libiothsm-std"
REVISION=${REVISION:-1}
DEFAULT_VERSION=$(cat $PROJECT_ROOT/version.txt)
VERSION="${VERSION:-$DEFAULT_VERSION}"

# Converts debian versioning to rpm version
# deb 1.0.1~dev100 ~> rpm 1.0.1-0.1.dev100

RPM_VERSION=`echo "$VERSION" | cut -d"~" -f1`
RPM_TAG=`echo "$VERSION" | cut -s -d"~" -f2`
if [[ ! -z ${RPM_TAG} ]]; then
RPM_RELEASE="0.${REVISION}.${RPM_TAG}"
else
RPM_RELEASE="${REVISION}"
fi

docker pull "$IMAGE"

run_command()
{
echo "$1"
docker \
run \
--rm \
-e "USER=root" \
-e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/toolchain/arm-linux-gnueabihf/bin:/cargo/bin" \
-v "$PROJECT_ROOT/target:/target" \
-v "$PROJECT_ROOT:/project" \
-i "$IMAGE" \
sh -c "$1"
}

mkdir -p $BUILD_DIR
run_command "cd /$BUILD_DIR_REL && cmake -DCMAKE_SYSROOT=/toolchain/arm-linux-gnueabihf/libc -DCMAKE_C_COMPILER=/toolchain/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/toolchain/bin/arm-linux-gnueabihf-g++ -DCMAKE_SYSTEM_NAME=Linux -DCPACK_RPM_PACKAGE_ARCHITECTURE=armv7hl -DCPACK_PACKAGE_VERSION=\"$RPM_VERSION\" -DCPACK_RPM_PACKAGE_RELEASE=\"$RPM_RELEASE\" -DBUILD_SHARED=On -Drun_unittests=Off -Duse_emulator=Off -DCMAKE_BUILD_TYPE=Release -Duse_default_uuid=On -DCPACK_GENERATOR=RPM /project/hsm-sys/azure-iot-hsm-c/"

run_command "cd /$BUILD_DIR_REL && make package"
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set -e
# Get directory of running script
DIR=$(cd "$(dirname "$0")" && pwd)

BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../..}
BUILD_REPOSITORY_LOCALPATH=${BUILD_REPOSITORY_LOCALPATH:-$DIR/../../../../..}
PROJECT_ROOT=${BUILD_REPOSITORY_LOCALPATH}/edgelet

BUILD_DIR=$PROJECT_ROOT/target/hsm/build
Expand Down
16 changes: 16 additions & 0 deletions edgelet/build/linux/docker/centos/build_amd64_container.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

set -ex


main() {
if [[ ! -f Dockerfile.x86_64-unknown-linux-gnu ]]
then
echo "Expected Dockerfile in current directory."
return 1
fi

docker build -f Dockerfile.x86_64-unknown-linux-gnu --tag centos-build:7.5-1 .
}

main "${@}"
Loading

0 comments on commit a090acb

Please sign in to comment.