From a7d56925fded737bb51611c16ad7d08dd35777ed Mon Sep 17 00:00:00 2001 From: Daniel Jones <105369507+djpolygon@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:28:27 -0500 Subject: [PATCH] Adding initial for deb amd64 and arm64 packages (#651) --- .github/workflows/deb_packager.yml | 139 +++++++++++++++++++++++ packaging/deb/cdk-erigon/DEBIAN/postinst | 12 ++ packaging/deb/cdk-erigon/DEBIAN/postrm | 8 ++ packaging/package_scripts/erigon.service | 16 +++ 4 files changed, 175 insertions(+) create mode 100644 .github/workflows/deb_packager.yml create mode 100755 packaging/deb/cdk-erigon/DEBIAN/postinst create mode 100755 packaging/deb/cdk-erigon/DEBIAN/postrm create mode 100644 packaging/package_scripts/erigon.service diff --git a/.github/workflows/deb_packager.yml b/.github/workflows/deb_packager.yml new file mode 100644 index 00000000000..e9274207ec8 --- /dev/null +++ b/.github/workflows/deb_packager.yml @@ -0,0 +1,139 @@ +name: deb_packager + +on: + push: + branches: + - 'main' + paths: + - '**' + tags: + - 'v*.*.*' + - 'v*.*.*-*' + +jobs: + build: + permissions: + id-token: write + contents: write + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Set up Go + uses: actions/setup-go@master + with: + go-version: 1.20.x + # Variables + - name: Adding TAG to ENV + run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV + - name: adding version + run: | + NUMERIC_VERSION=$( echo ${{ env.GIT_TAG }} | sed 's/[^0-9.]//g' ) + echo "VERSION=$NUMERIC_VERSION" >> $GITHUB_ENV + + # Update the VM + - name: update and install required packages + run: sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y dpkg-dev debhelper libgtest-dev libomp-dev libgmp-dev + + # Repo setup and build + - name: Cleaning repo + run: make clean + - name: Building for amd64 + run: make cdk-erigon + - name: clearing dpkg + run: sudo dpkg --clear-avail + + # Creating directory structure + - name: making directory structure + run: mkdir -p packaging/deb/cdk-erigon/usr/bin + - name: making directory structure for toml + run: mkdir -p packaging/deb/cdk-erigon/opt/erigon + - name: copy the binary for amd64 over + run: cp -rp build/bin/cdk-erigon packaging/deb/cdk-erigon/usr/bin/ + - name: create systemd directory for service file + run: mkdir -p packaging/deb/cdk-erigon/lib/systemd/system + - name: copy the erigon service file for systemd + run: cp -rp packaging/package_scripts/erigon.service packaging/deb/cdk-erigon/lib/systemd/system/ + + # Create control file and packaging + - name: create control file + run: | + touch packaging/deb/cdk-erigon/DEBIAN/control + echo "Package: cdk-erigon" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Version: ${{ env.VERSION }}" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Section: base" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Priority: optional" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Architecture: amd64" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Maintainer: devops@polygon.technology" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Description: cdk-erigon package" >> packaging/deb/cdk-erigon/DEBIAN/control + + - name: Creating package directory for binary for erigon ${{ env.ARCH }} + run: cp -rp packaging/deb/cdk-erigon packaging/deb/cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }} + env: + ARCH: amd64 + - name: Running package build for ${{ env.ARCH }} + run: dpkg-deb --build --root-owner-group packaging/deb/cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }} + env: + ARCH: amd64 + + # arm64 setup + - name: prepping environment for arm64 build + run: make clean + + - name: removing amd64 control file + run: rm -rf packaging/deb/cdk-erigon/DEBIAN/control + + - name: Adding requirements for cross compile + run: sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu + + - name: build for arm64 + run: GOARCH=arm64 GOOS=linux CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ CGO_ENABLED=1 go build -o build/bin/cdk-erigon ./cmd/cdk-erigon/main.go + + - name: Copying necessary files + run: cp -rp build/bin/cdk-erigon packaging/deb/cdk-erigon/usr/bin/ + - name: create control file + run: | + touch packaging/deb/cdk-erigon/DEBIAN/control + echo "Package: cdk-erigon" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Version: ${{ env.VERSION }}" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Section: base" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Priority: optional" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Architecture: arm64" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Maintainer: devops@polygon.technology" >> packaging/deb/cdk-erigon/DEBIAN/control + echo "Description: cdk-erigon package" >> packaging/deb/cdk-erigon/DEBIAN/control + + - name: Creating package directory for binary for erigon ${{ env.ARCH }} + run: cp -rp packaging/deb/cdk-erigon packaging/deb/cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }} + env: + ARCH: arm64 + + - name: Running package build for ${{ env.ARCH }} + run: dpkg-deb --build --root-owner-group packaging/deb/cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }} + env: + ARCH: arm64 + + - name: shasum the ${{ env.ARCH }} debian package + run: cd packaging/deb/ && sha256sum cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }}.deb > cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }}.deb.checksum + env: + ARCH: amd64 + + - name: shasum the ${{ env.ARCH }} debian package + run: cd packaging/deb/ && sha256sum cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }}.deb > cdk-erigon-${{ env.GIT_TAG }}-${{ env.ARCH }}.deb.checksum + env: + ARCH: arm64 + + # Confirm packages built and upload + - name: Confirming package built + run: ls -ltr packaging/deb/ | grep cdk-erigon + + - name: Release erigon Packages + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ env.GIT_TAG }} + prerelease: true + files: | + packaging/deb/cdk-erigon**.deb + packaging/deb/cdk-erigon**.deb.checksum + diff --git a/packaging/deb/cdk-erigon/DEBIAN/postinst b/packaging/deb/cdk-erigon/DEBIAN/postinst new file mode 100755 index 00000000000..1da694fbab5 --- /dev/null +++ b/packaging/deb/cdk-erigon/DEBIAN/postinst @@ -0,0 +1,12 @@ +#!/bin/bash +# This is a postinstallation script so the service can be configured and started when requested +# +sudo adduser --disabled-password --disabled-login --shell /usr/sbin/nologin --quiet --system --no-create-home --home /nonexistent erigon +if [ -d "/opt/erigon" ] +then + echo "Directory /opt/erigon exists." +else + mkdir -p /opt/erigon + sudo chown -R erigon /opt/erigon +fi +sudo systemctl daemon-reload \ No newline at end of file diff --git a/packaging/deb/cdk-erigon/DEBIAN/postrm b/packaging/deb/cdk-erigon/DEBIAN/postrm new file mode 100755 index 00000000000..f08f34dad9d --- /dev/null +++ b/packaging/deb/cdk-erigon/DEBIAN/postrm @@ -0,0 +1,8 @@ +#!/bin/bash +# +############### +# Remove erigon installs +############## +sudo rm -rf /lib/systemd/system/erigon.service +sudo deluser erigon +sudo systemctl daemon-reload \ No newline at end of file diff --git a/packaging/package_scripts/erigon.service b/packaging/package_scripts/erigon.service new file mode 100644 index 00000000000..b35a5e1bc6a --- /dev/null +++ b/packaging/package_scripts/erigon.service @@ -0,0 +1,16 @@ +[Unit] + Description=cdk-erigon + StartLimitIntervalSec=500 + StartLimitBurst=5 + +[Service] + Restart=on-failure + RestartSec=5s + ExecStart=/usr/bin/cdk-erigon server -config "/opt/erigon/config.toml" + Type=simple + KillSignal=SIGINT + User=erigon + TimeoutStopSec=120 + +[Install] + WantedBy=multi-user.target \ No newline at end of file