diff options
-rw-r--r-- | .github/workflows/debian.yml | 26 | ||||
-rw-r--r-- | .github/workflows/ppa.yml | 34 | ||||
-rw-r--r-- | debian/.gitignore | 2 | ||||
-rw-r--r-- | debian/Makefile | 85 | ||||
-rw-r--r-- | debian/README.Debian | 55 | ||||
-rw-r--r-- | debian/Vagrantfile | 84 | ||||
-rw-r--r-- | debian/changelog | 225 | ||||
-rw-r--r-- | debian/control | 14 | ||||
-rw-r--r-- | debian/copyright | 39 | ||||
-rw-r--r-- | debian/gbp.conf | 7 | ||||
-rw-r--r-- | debian/install | 7 | ||||
l--------- | debian/linux-status.service | 1 | ||||
-rw-r--r-- | debian/prelude.mk | 23 | ||||
-rwxr-xr-x | debian/rules | 3 | ||||
-rw-r--r-- | debian/source/format | 1 | ||||
-rw-r--r-- | debian/source/include-binaries | 1 |
16 files changed, 607 insertions, 0 deletions
diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml new file mode 100644 index 0000000..762071c --- /dev/null +++ b/.github/workflows/debian.yml @@ -0,0 +1,26 @@ +name: Packages (Debian) + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + name: Binary package + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Install dependencies + run: sudo make -C debian deps + - name: Build binary package + run: make -C debian bin/test + - name: Upload binary package + uses: actions/upload-artifact@v3 + with: + name: build-area + path: debian/build-area/ + if-no-files-found: error diff --git a/.github/workflows/ppa.yml b/.github/workflows/ppa.yml new file mode 100644 index 0000000..921d626 --- /dev/null +++ b/.github/workflows/ppa.yml @@ -0,0 +1,34 @@ +name: Publish (Launchpad) + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + name: Upload to PPA + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: '${{ secrets.GPG_PRIVATE_KEY }}' + passphrase: '${{ secrets.GPG_PASSPHRASE }}' + - name: Install dependencies + run: sudo make -C debian deps + - name: Create cowbuilder image + run: sudo make -C debian dist/create + - name: Build binary package + run: make -C debian dist + - name: Clean the build area + run: make -C debian clean + - name: Build source package + run: make -C debian src + - name: Upload to PPA + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/debian/') + run: make -C debian upload diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 0000000..3eb2fb2 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,2 @@ +build-area/ +.vagrant/ diff --git a/debian/Makefile b/debian/Makefile new file mode 100644 index 0000000..922ad28 --- /dev/null +++ b/debian/Makefile @@ -0,0 +1,85 @@ +include prelude.mk + +NAME ?= Egor Tensin +EMAIL ?= Egor.Tensin@gmail.com +PPA_OWNER ?= egor-tensin +PPA_NAME ?= linux-status +GPG_KEY ?= 3B3EF1235420917E0DB0723991D679FB92B036CB +DIST ?= focal + +$(eval $(call noexpand,NAME)) +$(eval $(call noexpand,EMAIL)) +$(eval $(call noexpand,PPA_OWNER)) +$(eval $(call noexpand,PPA_NAME)) +$(eval $(call noexpand,GPG_KEY)) +$(eval $(call noexpand,DIST)) + +export NAME +export EMAIL + +this_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +root := $(this_dir)/.. +build_area := $(this_dir)/build-area + +.PHONY: DO +DO: + +.PHONY: deps +deps: + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential cowbuilder devscripts dh-make dput git-buildpackage vim + +.PHONY: dch +dch: + gbp dch --distribution=unstable + +.PHONY: commit +commit: + cd -- '$(call escape,$(root))' && \ + version="$$( dpkg-parsechangelog --show-field Version )" && \ + git commit -m "debian: $$version" + +.PHONY: tag +tag: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-tag-only + +.PHONY: src/test +src/test: + cd -- '$(call escape,$(root))' && gbp buildpackage -S --no-sign --git-ignore-new + +.PHONY: src +src: + cd -- '$(call escape,$(root))' && gbp buildpackage -S '-k0x$(call escape,$(GPG_KEY))' --changes-option=-sa + +.PHONY: bin/test +bin/test: + cd -- '$(call escape,$(root))' && gbp buildpackage -b --no-sign --git-ignore-new + +.PHONY: bin +bin: + cd -- '$(call escape,$(root))' && gbp buildpackage -b '-k0x$(call escape,$(GPG_KEY))' + +.PHONY: dist/create +dist/create: + cd -- '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder create + +.PHONY: dist/update +dist/update: + cd -- '$(call escape,$(root))' && env 'DIST=$(call escape,$(DIST))' git-pbuilder update + +.PHONY: dist/test +dist/test: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-ignore-new --git-pbuilder '--git-dist=$(call escape,$(DIST))' + +.PHONY: dist +dist: + cd -- '$(call escape,$(root))' && gbp buildpackage --git-pbuilder '--git-dist=$(call escape,$(DIST))' + cd -- '$(call escape,$(root))' && debsign '-k0x$(call escape,$(GPG_KEY))' --debs-dir '$(call escape,$(build_area))' + +.PHONY: upload +upload: + find '$(call escape,$(build_area))' -type f -name '*.changes' -exec dput '$(call escape,ppa:$(PPA_OWNER)/$(PPA_NAME)/ubuntu/$(DIST))' {} ';' + +.PHONY: clean +clean: + rm -rf -- '$(call escape,$(build_area))' diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..f85278f --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,55 @@ +linux-status for Debian +---------------------- + +There's a Vagrantfile to make maintenance easier. To start, use `vagrant up`, +then `vagrant ssh`. The project will be in /vagrant; kill the VM using +`vagrant destroy -f` when you're done. + +There're a bunch of useful one-liners in Makefile. Everything is built in +debian/build-area/. + + * Merge the new version to the debian branch: + + git merge TAG + + * Add a changelog entry (you'll need to fix the version manually): + + make dch + + * To test, make a source package: + + make src + make src/test # Ignores uncommitted changes. + + * To test, make a binary package: + + make bin + make bin/test # Ignores uncommmited changes. + + * Commit the changes: + + git add changelog + make commit + make tag + + * You can push the changes to GitHub now, and it should take care of the + rest. Otherwise, you can upload the package to Launchpad manually as + described below. + + * Upload the source package to the PPA: + + make upload + + To make the package available for different Ubuntu distributions, copy the + package binaries on Launchpad. I dread the day when this becomes + impossible. + + * Make a binary package using pbuilder (useful for testing that the package + builds on a particular distribution): + + make DIST=focal dist/create + make DIST=focal dist/update + make DIST=focal dist + make DIST=focal dist/test # Ignores uncommitted changes. + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 08 Mar 2021 07:33:14 +0000 diff --git a/debian/Vagrantfile b/debian/Vagrantfile new file mode 100644 index 0000000..ab1decb --- /dev/null +++ b/debian/Vagrantfile @@ -0,0 +1,84 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +NAME = 'Egor Tensin' +EMAIL = 'Egor.Tensin@gmail.com' +GPG_KEY = '3B3EF1235420917E0DB0723991D679FB92B036CB' +UID = Process.euid + +Vagrant.configure("2") do |config| + config.vm.box = "generic/ubuntu2004" + + # Weirdly enough, VirtualBox's shared folders didn't quite work for me. + # gbp buildpackage would just exit with FileExistsError, which doesn't + # happen with NFS shares. + config.vm.synced_folder "../", "/vagrant", type: "nfs" + + config.vm.provider "libvirt" do |v| + v.cpus = 2 + v.memory = 4096 + end + + # Working with the git repository: + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +git config --global user.name '#{NAME}' +git config --global user.email '#{EMAIL}' + SHELL + config.ssh.forward_agent = true + + # Set DEB* environment variables: + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +tee -a ~/.bashrc <<'EOF' +export DEBFULLNAME='#{NAME}' +export DEBEMAIL='#{EMAIL}' +EOF + SHELL + + # gpg-agent forwarding (https://wiki.gnupg.org/AgentForwarding): + config.vm.provision "shell", privileged: false, inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +gpg --keyserver hkp://keyserver.ubuntu.com/ --recv-keys '0x#{GPG_KEY}' +gpg --import-ownertrust <<'EOF' +#{GPG_KEY}:6: +EOF + SHELL + config.vm.provision "shell", inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +echo 'StreamLocalBindUnlink yes' >> /etc/ssh/sshd_config + SHELL + # "agent-extra-socket" on the host. + local_gpg_socket = one_line(run('gpgconf', '--list-dirs', 'agent-extra-socket')) + # "agent-socket" on the VM. + remote_gpg_socket = "/run/user/#{UID}/gnupg/S.gpg-agent" + config.ssh.extra_args = ['-R', "#{remote_gpg_socket}:#{local_gpg_socket}"] + + # Install the required packages: + config.vm.provision "shell", inline: <<-SHELL +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail +apt-get update && apt-get install -y make +cd /vagrant/debian && make deps + SHELL + + config.vm.provision :reload +end + +require "open3" + +def run(*cmd) + stdout, stderr, status = Open3.capture3(*cmd) + abort stderr unless status.success? + stdout +end + +def one_line(output) + lines = output.lines.map(&:chomp) + abort "Must be a single line: #{lines}" unless lines.length == 1 + lines.first +end diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..94c5644 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,225 @@ +linux-status (2.3.2-3) unstable; urgency=medium + + * debian: force inclusion of the original sources + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 21:17:24 +0000 + +linux-status (2.3.2-2) unstable; urgency=medium + + * workflows/ppa: do it for commits also + * workflows: prettify? + * debian/Makefile: use cd instead of pushd + * debian/Makefile: escape entire argument (including $(DIST)) + * debian/Makefile: use long options + * debian/Makefile: install vim as a dependency + * debian: disable build system auto-detection + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 20:56:09 +0000 + +linux-status (2.3.2-1) unstable; urgency=medium + + * workflows/ci: upgrade actions + * workflows: upgrade actions + * update URLs + * fix preludes in bash scripts + * workflows/ci: fix Python 3.6 tests + * debian/README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 04 Feb 2023 20:30:30 +0000 + +linux-status (2.3.1-1) unstable; urgency=medium + + * sort Docker containers by name + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 10 Oct 2022 08:24:40 +0200 + +linux-status (2.3-1) unstable; urgency=medium + + * log real client IP address + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 30 Jun 2022 12:46:16 +0500 + +linux-status (2.2.1-1) unstable; urgency=medium + + * update URLs + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 22 May 2022 11:01:08 +0200 + +linux-status (2.2-2) unstable; urgency=medium + + * debian/Makefile: add commit target + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 30 Apr 2022 00:05:18 +0200 + +linux-status (2.2-1) unstable; urgency=medium + + * html: show modals for power mgmt failures + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 29 Apr 2022 23:50:49 +0200 + +linux-status (2.1.3-1) unstable; urgency=medium + + * README: update + * index.html: update my link + * debian/Makefile: export NAME and EMAIL + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 15 Apr 2022 12:09:23 +0300 + +linux-status (2.1.2-1) unstable; urgency=medium + + * index.html: footer didn't stick to the bottom + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 11 Apr 2022 12:58:25 +0000 + +linux-status (2.1.1-1) unstable; urgency=medium + + * index.html: commands closer to buttons + * index.html: get rid of stupid # <a>nchors + * index.html: hostname header too large on mobile + * index.html: shorten commands + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 11 Apr 2022 11:42:00 +0000 + +linux-status (2.1-1) unstable; urgency=medium + + * src: shorter import + * app.py: print HTTP status when CGIing + * support disallowing power requests + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 11 Apr 2022 09:44:06 +0000 + +linux-status (2.0-1) unstable; urgency=medium + + * server.py: minor refactoring + * test/test.sh: use the port variable + * test: catch possible undetected failures + * app.py: refactoring + * app.py: add Docker container status + * index.html: add Docker status section + * README: update + * upgrade Bootstrap & jQuery + * index.html: two-space CSS indent + * index.html: use Bootstrap utilities + * put things into proper directories + * test: fix paths + * README: update + * index.html: display placeholders if no data + * index.html: use flexbox for header + * index.html: add a footer + * README: update + * index.html: get rid of extra whitespace + * README: update + * debian: update package description + * debian: update copyrights + * debian: fix paths + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 11 Apr 2022 01:57:09 +0000 + +linux-status (1.2-2) unstable; urgency=medium + + * debian/README: rearrange items + * debian/Makefile: consistent prelude + + -- Egor Tensin <Egor.Tensin@gmail.com> Wed, 06 Apr 2022 08:35:56 +0000 + +linux-status (1.2-1) unstable; urgency=medium + + * app.py: fix loginctl output parsing + * dump exceptions to browser's console + * app.py: include command's output in the exception + * test/test.sh: print curl output on failure + * app.py: don't query user info if no users + * app.py: don't do systemctl --user if no user instance + * workflows/ci: run tests as root also + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 24 Jan 2022 23:41:33 +0000 + +linux-status (1.1.0-1) unstable; urgency=medium + + * fix whitespace + * top: run with -E/-e if supported + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 03 Oct 2021 23:51:18 +0000 + +linux-status (1.0.1-1) unstable; urgency=medium + + * README: badges for all workflows + * workflows/test: linting + * workflows/test: test w/ latest Python + * workflows/test -> workflows/ci + * workflows/ci: rename to "CI" + * index.html: safer DOM generation using jQuery + * debian/Makefile: apt scripting best practices + * debian/README: update + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 03 Oct 2021 15:54:26 +0000 + +linux-status (1.0-3) unstable; urgency=medium + + * debian/Makefile: fix grammar + * debian: install whole directories + + -- Egor Tensin <Egor.Tensin@gmail.com> Thu, 29 Apr 2021 12:44:31 +0000 + +linux-status (1.0-2) unstable; urgency=medium + + * debian: Makefile best practices + * workflows/debian: error out if no files to upload + * workflows/ppa: rename the workflow + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 18 Apr 2021 11:52:40 +0000 + +linux-status (1.0-1) unstable; urgency=medium + + * test/test.sh: longer startup timeout + * workflows/test.yml: tweak step names + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 13 Mar 2021 07:19:40 +0000 + +linux-status (0.0.2-3) unstable; urgency=medium + + * debian: gbp buildpackage --git-ignore-branch + * workflows: tweak step names + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 12 Mar 2021 20:50:55 +0000 + +linux-status (0.0.2-2) unstable; urgency=medium + + * debian: add GitHub workflow + * debian: GitHub workflow to upload to PPA + + -- Egor Tensin <Egor.Tensin@gmail.com> Fri, 12 Mar 2021 20:31:07 +0000 + +linux-status (0.0.2-1) unstable; urgency=medium + + * README: update + * img: update example.png + * debian: update package description + * debian: add example.png to include-binaries + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 08 Mar 2021 08:18:03 +0000 + +linux-status (0.0.1-3) unstable; urgency=medium + + * debian: target the lowest denominator bionic + * debian: lint Vagrantfile + * debian: add README.Debian + * debian: add `make dch` command + + -- Egor Tensin <Egor.Tensin@gmail.com> Mon, 08 Mar 2021 07:55:46 +0000 + +linux-status (0.0.1-2) unstable; urgency=medium + + * debian: lower debhelper-compat level + * debian: add Vagrantfile for building packages + * debian: more one-liners in Makefile + * debian: set DEB* variables in Vagrantfile + * debian: add `make tag` command + + -- Egor Tensin <Egor.Tensin@gmail.com> Sun, 07 Mar 2021 23:02:18 +0000 + +linux-status (0.0.1-1) unstable; urgency=medium + + * Initial release. + + -- Egor Tensin <Egor.Tensin@gmail.com> Sat, 06 Mar 2021 19:48:48 +0000 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..617dc28 --- /dev/null +++ b/debian/control @@ -0,0 +1,14 @@ +Source: linux-status +Section: admin +Priority: optional +Maintainer: Egor Tensin <Egor.Tensin@gmail.com> +Build-Depends: debhelper-compat (= 10) +Standards-Version: 4.4.1 +Homepage: https://github.com/egor-tensin/linux-status + +Package: linux-status +Architecture: all +Depends: python3, ${misc:Depends} +Description: Simple Linux server monitoring + Shows your `top`, Docker container status, systemd units & timers, allows you + to reboot the server, etc. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..be44d72 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,39 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: linux-status +Upstream-Contact: Egor Tensin <Egor.Tensin@gmail.com> +Source: https://github.com/egor-tensin/linux-status + +Files: * +Copyright: 2018-2022 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +Files: debian/* +Copyright: 2021-2022 Egor Tensin <Egor.Tensin@gmail.com> +License: MIT + +Files: html/css/bootstrap.min.css html/js/bootstrap.bundle.min.js +Copyright: 2011-2021 The Bootstrap Authors +License: MIT + +Files: html/js/jquery.min.js +Copyright: JS Foundation and other contributors +License: MIT + +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..e7faaa2 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,7 @@ +[DEFAULT] +upstream-tag = v%(version)s +ignore-branch = True +debian-branch = debian +debian-tag = debian/v%(version)s +pristine-tar = False +export-dir = debian/build-area/ diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..29bc895 --- /dev/null +++ b/debian/install @@ -0,0 +1,7 @@ +LICENSE.txt usr/share/linux-status + +README.md usr/share/doc/linux-status +doc usr/share/doc/linux-status + +src/*.py srv/linux-status +html srv/linux-status diff --git a/debian/linux-status.service b/debian/linux-status.service new file mode 120000 index 0000000..e104dba --- /dev/null +++ b/debian/linux-status.service @@ -0,0 +1 @@ +../dist/systemd/linux-status.service
\ No newline at end of file diff --git a/debian/prelude.mk b/debian/prelude.mk new file mode 100644 index 0000000..374111e --- /dev/null +++ b/debian/prelude.mk @@ -0,0 +1,23 @@ +# Please see https://egort.name/blog/notes/makefile.html + +MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables +unexport MAKEFLAGS +.DEFAULT_GOAL := all +.DELETE_ON_ERROR: +.SUFFIXES: +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c + +escape = $(subst ','\'',$(1)) + +define noexpand +ifeq ($$(origin $(1)),environment) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),environment override) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),command line) + override $(1) := $$(value $(1)) +endif +endef diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..43896d7 --- /dev/null +++ b/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ --buildsystem=none diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 0000000..1acac09 --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1 @@ +doc/example.png |