From c58a6f5b142194637c51be6d9462b77bfda7c24b Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 7 Jul 2016 23:15:52 -0400 Subject: tidy/update --- .config/git/config | 5 ++ .config/pacman/makepkg.conf | 11 +++ .gitconfig | 5 -- .gitignore | 7 -- .gnupg/.gitignore | 3 + .gnupg/gpg.conf | 194 -------------------------------------------- .local/bin/.gitignore | 1 + .local/bin/autobuild.c | 73 +++++++++++++++++ .local/bin/autobuild.sh | 117 ++++++++++++++++++++++++++ .local/bin/setup | 50 ++++++++++++ .makepkg.conf | 11 --- .ssh/.gitignore | 1 + .ssh/config | 3 - .ssh/known_hosts | 4 +- bin/autobuild.c | 73 ----------------- bin/autobuild.sh | 117 -------------------------- bin/setup | 41 ---------- 17 files changed, 263 insertions(+), 453 deletions(-) create mode 100644 .config/git/config create mode 100644 .config/pacman/makepkg.conf delete mode 100644 .gitconfig create mode 100644 .gnupg/.gitignore create mode 100644 .local/bin/.gitignore create mode 100644 .local/bin/autobuild.c create mode 100755 .local/bin/autobuild.sh create mode 100755 .local/bin/setup delete mode 100644 .makepkg.conf create mode 100644 .ssh/.gitignore delete mode 100644 bin/autobuild.c delete mode 100755 bin/autobuild.sh delete mode 100755 bin/setup diff --git a/.config/git/config b/.config/git/config new file mode 100644 index 0000000..15afca0 --- /dev/null +++ b/.config/git/config @@ -0,0 +1,5 @@ +[user] + name = Parabola automatic package builder + email = dev@lists.parabolagnulinux.org +[push] + default = simple diff --git a/.config/pacman/makepkg.conf b/.config/pacman/makepkg.conf new file mode 100644 index 0000000..caad51b --- /dev/null +++ b/.config/pacman/makepkg.conf @@ -0,0 +1,11 @@ +PKGDEST="${HOME}/packages/pkgdest" +SRCDEST="${HOME}/packages/srcdest" +SRCPKGDEST="${HOME}/packages/srcpkgdest" +LOGDEST="${HOME}/packages/logdest" +BUILDDIR="${HOME}/packages/builddir" + +GPGKEY="$({ + sed -nr 's/^\s*default-key\s+//p' "${HOME}/.gnupg/gpg.conf" + gpg --list-secret-keys --with-colons | grep ^sec: | cut -d: -f5 | sed -r 's/.*(........)$/\1/' + } | sed 1q)" +PACKAGER="$(gpg --with-colons --fingerprint "$GPGKEY"|grep ^uid:|cut -d: -f10)" diff --git a/.gitconfig b/.gitconfig deleted file mode 100644 index 15afca0..0000000 --- a/.gitconfig +++ /dev/null @@ -1,5 +0,0 @@ -[user] - name = Parabola automatic package builder - email = dev@lists.parabolagnulinux.org -[push] - default = simple diff --git a/.gitignore b/.gitignore index d344be3..22ab658 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,2 @@ -/bin/autobuild /packages/ - -/.ssh/id_* - -/.gnupg/* -!/.gnupg/gpg.conf - *~ diff --git a/.gnupg/.gitignore b/.gnupg/.gitignore new file mode 100644 index 0000000..4f91c30 --- /dev/null +++ b/.gnupg/.gitignore @@ -0,0 +1,3 @@ +* +!/.gitignore +!/gpg.conf diff --git a/.gnupg/gpg.conf b/.gnupg/gpg.conf index 942678f..25c6df7 100644 --- a/.gnupg/gpg.conf +++ b/.gnupg/gpg.conf @@ -1,196 +1,2 @@ -# Options for GnuPG -# Copyright 1998, 1999, 2000, 2001, 2002, 2003, -# 2010 Free Software Foundation, Inc. -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Unless you specify which option file to use (with the command line -# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf -# by default. -# -# An options file can contain any long options which are available in -# GnuPG. If the first non white space character of a line is a '#', -# this line is ignored. Empty lines are also ignored. -# -# See the man page for a list of options. - -# Uncomment the following option to get rid of the copyright notice - -#no-greeting - -# If you have more than 1 secret key in your keyring, you may want to -# uncomment the following option and set your preferred keyid. - -#default-key 621CC013 - -# If you do not pass a recipient to gpg, it will ask for one. Using -# this option you can encrypt to a default key. Key validation will -# not be done in this case. The second form uses the default key as -# default recipient. - -#default-recipient some-user-id -#default-recipient-self - -# By default GnuPG creates version 4 signatures for data files as -# specified by OpenPGP. Some earlier (PGP 6, PGP 7) versions of PGP -# require the older version 3 signatures. Setting this option forces -# GnuPG to create version 3 signatures. - -#force-v3-sigs - -# Because some mailers change lines starting with "From " to ">From " -# it is good to handle such lines in a special way when creating -# cleartext signatures; all other PGP versions do it this way too. -# To enable full OpenPGP compliance you may want to use this option. - -#no-escape-from-lines - -# When verifying a signature made from a subkey, ensure that the cross -# certification "back signature" on the subkey is present and valid. -# This protects against a subtle attack against subkeys that can sign. -# Defaults to --no-require-cross-certification. However for new -# installations it should be enabled. - require-cross-certification - - -# If you do not use the Latin-1 (ISO-8859-1) charset, you should tell -# GnuPG which is the native character set. Please check the man page -# for supported character sets. This character set is only used for -# metadata and not for the actual message which does not undergo any -# translation. Note that future version of GnuPG will change to UTF-8 -# as default character set. - -#charset utf-8 - -# Group names may be defined like this: -# group mynames = paige 0x12345678 joe patti -# -# Any time "mynames" is a recipient (-r or --recipient), it will be -# expanded to the names "paige", "joe", and "patti", and the key ID -# "0x12345678". Note there is only one level of expansion - you -# cannot make an group that points to another group. Note also that -# if there are spaces in the recipient name, this will appear as two -# recipients. In these cases it is better to use the key ID. - -#group mynames = paige 0x12345678 joe patti - -# Some old Windows platforms require 8.3 filenames. If your system -# can handle long filenames, uncomment this. - -#no-mangle-dos-filenames - -# Lock the file only once for the lifetime of a process. If you do -# not define this, the lock will be obtained and released every time -# it is needed - normally this is not needed. - -#lock-once - -# GnuPG can send and receive keys to and from a keyserver. These -# servers can be HKP, email, or LDAP (if GnuPG is built with LDAP -# support). -# -# Example HKP keyservers: -# hkp://keys.gnupg.net -# -# Example LDAP keyservers: -# ldap://pgp.surfnet.nl:11370 -# -# Regular URL syntax applies, and you can set an alternate port -# through the usual method: -# hkp://keyserver.example.net:22742 -# -# If you have problems connecting to a HKP server through a buggy http -# proxy, you can use keyserver option broken-http-proxy (see below), -# but first you should make sure that you have read the man page -# regarding proxies (keyserver option honor-http-proxy) -# -# Most users just set the name and type of their preferred keyserver. -# Note that most servers (with the notable exception of -# ldap://keyserver.pgp.com) synchronize changes with each other. Note -# also that a single server name may actually point to multiple -# servers via DNS round-robin. hkp://keys.gnupg.net is an example of -# such a "server", which spreads the load over a number of physical -# servers. To see the IP address of the server actually used, you may use -# the "--keyserver-options debug". - keyserver hkp://keys.gnupg.net -#keyserver http://http-keys.gnupg.net -#keyserver mailto:pgp-public-keys@keys.nl.pgp.net - -# Common options for keyserver functions: -# -# include-disabled = when searching, include keys marked as "disabled" -# on the keyserver (not all keyservers support this). -# -# no-include-revoked = when searching, do not include keys marked as -# "revoked" on the keyserver. -# -# verbose = show more information as the keys are fetched. -# Can be used more than once to increase the amount -# of information shown. -# -# use-temp-files = use temporary files instead of a pipe to talk to the -# keyserver. Some platforms (Win32 for one) always -# have this on. -# -# keep-temp-files = do not delete temporary files after using them -# (really only useful for debugging) -# -# honor-http-proxy = if the keyserver uses HTTP, honor the http_proxy -# environment variable -# -# broken-http-proxy = try to work around a buggy HTTP proxy -# -# auto-key-retrieve = automatically fetch keys as needed from the keyserver -# when verifying signatures or when importing keys that -# have been revoked by a revocation key that is not -# present on the keyring. -# -# no-include-attributes = do not include attribute IDs (aka "photo IDs") -# when sending keys to the keyserver. - -#keyserver-options auto-key-retrieve - -# Uncomment this line to display photo user IDs in key listings and -# when a signature from a key with a photo is verified. - -#show-photos - -# Use this program to display photo user IDs -# -# %i is expanded to a temporary file that contains the photo. -# %I is the same as %i, but the file isn't deleted afterwards by GnuPG. -# %k is expanded to the key ID of the key. -# %K is expanded to the long OpenPGP key ID of the key. -# %t is expanded to the extension of the image (e.g. "jpg"). -# %T is expanded to the MIME type of the image (e.g. "image/jpeg"). -# %f is expanded to the fingerprint of the key. -# %% is %, of course. -# -# If %i or %I are not present, then the photo is supplied to the -# viewer on standard input. If your platform supports it, standard -# input is the best way to do this as it avoids the time and effort in -# generating and then cleaning up a secure temp file. -# -# The default program is "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin" -# On Mac OS X and Windows, the default is to use your regular JPEG image -# viewer. -# -# Some other viewers: -# photo-viewer "qiv %i" -# photo-viewer "ee %i" -# photo-viewer "display -title 'KeyID 0x%k'" -# -# This one saves a copy of the photo ID in your home directory: -# photo-viewer "cat > ~/photoid-for-key-%k.%t" -# -# Use your MIME handler to view photos: -# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG" - diff --git a/.local/bin/.gitignore b/.local/bin/.gitignore new file mode 100644 index 0000000..8eb1c0a --- /dev/null +++ b/.local/bin/.gitignore @@ -0,0 +1 @@ +/autobuild diff --git a/.local/bin/autobuild.c b/.local/bin/autobuild.c new file mode 100644 index 0000000..3805e19 --- /dev/null +++ b/.local/bin/autobuild.c @@ -0,0 +1,73 @@ +/* Just a "stupid", secure SUID wrapper around autobuild.sh */ +/* Copyright (C) 2014 Luke Shumaker + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define _GNU_SOURCE /* for environment functions */ +#include /* for alloca(3) */ +#include /* for errno */ +#include /* for error(3) */ +#include /* for getpwuid(3) */ +#include /* for environment functions */ +#include /* for strlen(3), strcpy(3) */ +#include /* for geteuid(3), execv(3) */ + +void +mysetenv(const char *name, const char *value) +{ + if (value != NULL) { + if (setenv(name, value, 1) != 0) { + error(127, errno, "could not set %s", name); + } + } +} + +int +main(int argc, char **argv) +{ + struct passwd *user = getpwuid(geteuid()); + setreuid(geteuid(), -1); + + const char *env_term = getenv("TERM"); + const char *env_lang = getenv("LANG"); + const char *env_lc_all = getenv("LC_ALL"); + const char *env_lc_collate = getenv("LC_COLLATE"); + const char *env_lc_ctype = getenv("LC_CTIME"); + const char *env_lc_messages = getenv("LC_MESSAGES"); + const char *env_lc_monetary = getenv("LC_MONETARY"); + const char *env_lc_numeric = getenv("LC_NUMERIC"); + const char *env_lc_time = getenv("LC_TIME"); + clearenv(); + mysetenv("USER" , user->pw_name ); + mysetenv("LOGNAME" , user->pw_name ); + mysetenv("HOME" , user->pw_dir ); + mysetenv("TERM" , env_term ); + mysetenv("LANG" , env_lang ); + mysetenv("LC_ALL" , env_lc_all ); + mysetenv("LC_COLLATE" , env_lc_collate ); + mysetenv("LC_CTIME" , env_lc_ctype ); + mysetenv("LC_MESSAGES", env_lc_messages); + mysetenv("LC_MONETARY", env_lc_monetary); + mysetenv("LC_NUMERIC" , env_lc_numeric ); + mysetenv("LC_TIME" , env_lc_time ); + + const char *script_suffix = "/.local/bin/autobuild.sh"; + char *script = alloca(strlen(user->pw_dir)+strlen(script_suffix)); + strcpy(script, user->pw_dir); + strcpy(&(script[strlen(user->pw_dir)]), script_suffix); + + execv(script, argv); + error(127, errno, "%s", script); +} diff --git a/.local/bin/autobuild.sh b/.local/bin/autobuild.sh new file mode 100755 index 0000000..d62e77b --- /dev/null +++ b/.local/bin/autobuild.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# Copyright (C) 2014 Luke Shumaker +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +export PATH # because of setuid safety, path may be currently un-exported + + +usage() { + print "Usage: %q REPO/PKGBASE [FILES...]" "${0##*/}" + print "When run from a git directory, automatically updates the package based on FILES in the git repo" +} + +main() { + . "$(librelib messages)" + setup_traps + + # Get the date as the *very* first thing + # We get the current date instead of getting a date from git because git time is + # non-monotonic. I mean, the system time is also non-monotonic. But at + # day-granularity, I don't expect this to ever come up. A git-rebase or weird + # merge could easily break things if we get the git time. + newpkgver_date=$(LC_ALL=C date -u +%Y%m%d) + + # Configuration parsing ################################################ + + . "$(librelib conf)" + load_files libretools + check_vars libretools WORKDIR ABSLIBRERECV ABSLIBRESEND + + # Lock to pevent conflicting runs ###################################### + + mkdir -p "${WORKDIR}/lockdir" + lock 9 "$HOME/packages/lockdir/${PWD//\//%2F}" "Waiting for previous run of %q to finish" "$0" + + # Option/usage parsing ################################################# + + if [[ $# -lt 1 ]]; then + error "%q takes at least 1 argument" "$0" + usage >&2 + exit 1 + fi + + package=$1 + package_re='^[^/]+/[^/]+$' + if ! [[ $package =~ $package_re ]]; then + error "The first argument must be in the format REPO/PKGBASE: %s" "$package" + usage >&2 + exit 1 + fi + unset package_re + + if [[ $PWD != *.git ]]; then + die "%q should be run as a hook from a git repository" "$0" + fi + + newgitver=$(git log -n1 --format='%H' master -- "${@:2}") + + # The real work begins! ################################################ + + # Get the ABSLibre tree + gitget -f -p "$ABSLIBRESEND" checkout "$ABSLIBRERECV" "$WORKDIR/abslibre" + if ! [[ -f "${WORKDIR}/abslibre/${package}/PKGBUILD" ]]; then + die "package does not exist in abslibre.git: %s" "$package" + fi + cd "$WORKDIR/abslibre/${package}" + + # Figure out info about the last version + oldgitver=$(sed -n 's/^_gitver=//p' PKGBUILD) + oldpkgver=$(sed -n 's/^pkgver=//p' PKGBUILD) + oldpkgver_date=${oldpkgver%%.*} + oldpkgver_rel=${oldpkgver#${oldpkgver_date}}; oldpkgver_rel=${oldpkgver_rel#.}; oldpkgver_rel=${oldpkgver_rel:-0} + + # Make sure we actually have changes + if [[ "$newgitver" == "$oldgitver" ]]; then + msg 'No new changes were committed, nothing to do' + exit 0 + fi + + # Handle doing multiple versions in the same day + if [[ "$newpkgver_date" == "$oldpkgver_date" ]]; then + declare -i newpkgver_rel=${oldpkgver_rel}+1 + newpkgver=${newpkgver_date}.${newpkgver_rel} + else + newpkgver=${newpkgver_date} + fi + + # Update the PKGBUILD + sed -i -e "s|^pkgver=.*|pkgver=${newpkgver}|" \ + -e "s|^_gitver=.*|_gitver=${newgitver}|" \ + -e 's|^pkgrel=.*|pkgrel=1|' \ + PKGBUILD + updpkgsums + git add PKGBUILD + git commit -m "Update ${package}" + + # Build the new package + makepkg -c + librestage + + # Publish the updates + git push + librerelease +} + +main "$@" diff --git a/.local/bin/setup b/.local/bin/setup new file mode 100755 index 0000000..e26c590 --- /dev/null +++ b/.local/bin/setup @@ -0,0 +1,50 @@ +#!/usr/bin/make -f + +HOME = $(shell cd "$(dir $(lastword $(MAKEFILE_LIST)))" && git rev-parse --show-toplevel) +export HOME +undefine XDG_CONFIG_DIR + +LANG = C +export LANG +undefine $(filter LC_%,$(.VARIABLES)) + +CFLAGS += -std=c99 -Wall -Wextra -Werror -Wno-unused-parameter + +dirs = \ + $(HOME)/packages/pkgdest \ + $(HOME)/packages/srcdest \ + $(HOME)/packages/srcpkgdest \ + $(HOME)/packages/logdest \ + $(HOME)/packages/builddir + +all: \ + $(HOME)/.local/bin/autobuild \ + $(HOME)/.ssh/id_rsa \ + $(HOME)/.ssh/id_rsa.pub \ + $(HOME)/.gnupg/secring.gpg \ + $(HOME)/packages/abslibre \ + $(dirs) + +$(HOME)/.local/bin/autobuild: %: %.c + cd $(@D) && $(LINK.c) $(notdir $^) $(LOADLIBES) $(LDLIBS) -o $(@F) && chmod 6755 $(@F) + +$(HOME)/.ssh/id_% $(HOME)/.ssh/id_%.pub: + ssh-keygen -N '' -f $(@D)/id_$* + +$(HOME)/.gnupg/secring.gpg: | $(HOME)/.config/git/config + chmod 700 $(@D) + printf '%s\n' \ + 'Key-Type: default' \ + 'Subkey-Type: default' \ + "Name-Real: $$(git config user.name)" \ + "Name-Email: $$(git config user.email)" \ + 'Expire-Date: 0' \ + | gpg --gen-key --batch + +$(HOME)/packages/abslibre: + createworkdir + +$(dirs): %: + mkdir -p -- $@ + +.DELETE_ON_ERROR: diff --git a/.makepkg.conf b/.makepkg.conf deleted file mode 100644 index caad51b..0000000 --- a/.makepkg.conf +++ /dev/null @@ -1,11 +0,0 @@ -PKGDEST="${HOME}/packages/pkgdest" -SRCDEST="${HOME}/packages/srcdest" -SRCPKGDEST="${HOME}/packages/srcpkgdest" -LOGDEST="${HOME}/packages/logdest" -BUILDDIR="${HOME}/packages/builddir" - -GPGKEY="$({ - sed -nr 's/^\s*default-key\s+//p' "${HOME}/.gnupg/gpg.conf" - gpg --list-secret-keys --with-colons | grep ^sec: | cut -d: -f5 | sed -r 's/.*(........)$/\1/' - } | sed 1q)" -PACKAGER="$(gpg --with-colons --fingerprint "$GPGKEY"|grep ^uid:|cut -d: -f10)" diff --git a/.ssh/.gitignore b/.ssh/.gitignore new file mode 100644 index 0000000..382ea75 --- /dev/null +++ b/.ssh/.gitignore @@ -0,0 +1 @@ +/id_* diff --git a/.ssh/config b/.ssh/config index 1a90be7..bb876ba 100644 --- a/.ssh/config +++ b/.ssh/config @@ -1,6 +1,3 @@ Host * Protocol 2 Compression yes -Host repo - Port 1863 - HostName repo.parabolagnulinux.org diff --git a/.ssh/known_hosts b/.ssh/known_hosts index 927ab67..927bb7f 100644 --- a/.ssh/known_hosts +++ b/.ssh/known_hosts @@ -1,2 +1,2 @@ -localhost,projects.parabolagnulinux.org,142.4.205.9,[projects.parabolagnulinux.org]:1863,[142.4.205.9]:1863 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHkqv9ewWyXjrO6P5iYiUYfEYP8ALBg9C2GxA7yOJDa/vwDtx6OS3KMNRkUgx6vL/6/D555Xdypys+lwLmcdmnM= -[repo.parabolagnulinux.org]:1863,[80.87.131.252]:1863 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK4pzgrqj2qrklFpDZrg56bjVHJyodEtvdU/QUQNPgErfjfn0BJRi4N2zL19VK5ab3kJ6zJrfY7YWOv/Ky+MqUw= +git.parabola.nu,93.95.226.249 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJpLBQvc8gXo5ZtOUSTM9B604xiYs7pC/80BBCWrrolvFS46PPuvM/zIb/7Iwv/xOsI/PDdJIrkMoqGlPuGj3Mo= +repo.parabola.nu,80.87.131.232 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMADiqJyJfjxXv+8FC3JxSfGBFmhevhHTWJEoe1gc5TVEOuvPD8XXy2o5EN9IzBLLFGlZbAEKYdt3apAFPJtwfE= diff --git a/bin/autobuild.c b/bin/autobuild.c deleted file mode 100644 index bb0de00..0000000 --- a/bin/autobuild.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Just a "stupid", secure SUID wrapper around autobuild.sh */ -/* Copyright (C) 2014 Luke Shumaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#define _GNU_SOURCE /* for environment functions */ -#include /* for alloca(3) */ -#include /* for errno */ -#include /* for error(3) */ -#include /* for getpwuid(3) */ -#include /* for environment functions */ -#include /* for strlen(3), strcpy(3) */ -#include /* for geteuid(3), execv(3) */ - -void -mysetenv(const char *name, const char *value) -{ - if (value != NULL) { - if (setenv(name, value, 1) != 0) { - error(127, errno, "could not set %s", name); - } - } -} - -int -main(int argc, char **argv) -{ - struct passwd *user = getpwuid(geteuid()); - setreuid(geteuid(), -1); - - const char *env_term = getenv("TERM"); - const char *env_lang = getenv("LANG"); - const char *env_lc_all = getenv("LC_ALL"); - const char *env_lc_collate = getenv("LC_COLLATE"); - const char *env_lc_ctype = getenv("LC_CTIME"); - const char *env_lc_messages = getenv("LC_MESSAGES"); - const char *env_lc_monetary = getenv("LC_MONETARY"); - const char *env_lc_numeric = getenv("LC_NUMERIC"); - const char *env_lc_time = getenv("LC_TIME"); - clearenv(); - mysetenv("USER" , user->pw_name ); - mysetenv("LOGNAME" , user->pw_name ); - mysetenv("HOME" , user->pw_dir ); - mysetenv("TERM" , env_term ); - mysetenv("LANG" , env_lang ); - mysetenv("LC_ALL" , env_lc_all ); - mysetenv("LC_COLLATE" , env_lc_collate ); - mysetenv("LC_CTIME" , env_lc_ctype ); - mysetenv("LC_MESSAGES", env_lc_messages); - mysetenv("LC_MONETARY", env_lc_monetary); - mysetenv("LC_NUMERIC" , env_lc_numeric ); - mysetenv("LC_TIME" , env_lc_time ); - - const char *script_suffix = "/bin/autobuild.sh"; - char *script = alloca(strlen(user->pw_dir)+strlen(script_suffix)); - strcpy(script, user->pw_dir); - strcpy(&(script[strlen(user->pw_dir)]), script_suffix); - - execv(script, argv); - error(127, errno, "%s", script); -} diff --git a/bin/autobuild.sh b/bin/autobuild.sh deleted file mode 100755 index d62e77b..0000000 --- a/bin/autobuild.sh +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/bash -# Copyright (C) 2014 Luke Shumaker -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -export PATH # because of setuid safety, path may be currently un-exported - - -usage() { - print "Usage: %q REPO/PKGBASE [FILES...]" "${0##*/}" - print "When run from a git directory, automatically updates the package based on FILES in the git repo" -} - -main() { - . "$(librelib messages)" - setup_traps - - # Get the date as the *very* first thing - # We get the current date instead of getting a date from git because git time is - # non-monotonic. I mean, the system time is also non-monotonic. But at - # day-granularity, I don't expect this to ever come up. A git-rebase or weird - # merge could easily break things if we get the git time. - newpkgver_date=$(LC_ALL=C date -u +%Y%m%d) - - # Configuration parsing ################################################ - - . "$(librelib conf)" - load_files libretools - check_vars libretools WORKDIR ABSLIBRERECV ABSLIBRESEND - - # Lock to pevent conflicting runs ###################################### - - mkdir -p "${WORKDIR}/lockdir" - lock 9 "$HOME/packages/lockdir/${PWD//\//%2F}" "Waiting for previous run of %q to finish" "$0" - - # Option/usage parsing ################################################# - - if [[ $# -lt 1 ]]; then - error "%q takes at least 1 argument" "$0" - usage >&2 - exit 1 - fi - - package=$1 - package_re='^[^/]+/[^/]+$' - if ! [[ $package =~ $package_re ]]; then - error "The first argument must be in the format REPO/PKGBASE: %s" "$package" - usage >&2 - exit 1 - fi - unset package_re - - if [[ $PWD != *.git ]]; then - die "%q should be run as a hook from a git repository" "$0" - fi - - newgitver=$(git log -n1 --format='%H' master -- "${@:2}") - - # The real work begins! ################################################ - - # Get the ABSLibre tree - gitget -f -p "$ABSLIBRESEND" checkout "$ABSLIBRERECV" "$WORKDIR/abslibre" - if ! [[ -f "${WORKDIR}/abslibre/${package}/PKGBUILD" ]]; then - die "package does not exist in abslibre.git: %s" "$package" - fi - cd "$WORKDIR/abslibre/${package}" - - # Figure out info about the last version - oldgitver=$(sed -n 's/^_gitver=//p' PKGBUILD) - oldpkgver=$(sed -n 's/^pkgver=//p' PKGBUILD) - oldpkgver_date=${oldpkgver%%.*} - oldpkgver_rel=${oldpkgver#${oldpkgver_date}}; oldpkgver_rel=${oldpkgver_rel#.}; oldpkgver_rel=${oldpkgver_rel:-0} - - # Make sure we actually have changes - if [[ "$newgitver" == "$oldgitver" ]]; then - msg 'No new changes were committed, nothing to do' - exit 0 - fi - - # Handle doing multiple versions in the same day - if [[ "$newpkgver_date" == "$oldpkgver_date" ]]; then - declare -i newpkgver_rel=${oldpkgver_rel}+1 - newpkgver=${newpkgver_date}.${newpkgver_rel} - else - newpkgver=${newpkgver_date} - fi - - # Update the PKGBUILD - sed -i -e "s|^pkgver=.*|pkgver=${newpkgver}|" \ - -e "s|^_gitver=.*|_gitver=${newgitver}|" \ - -e 's|^pkgrel=.*|pkgrel=1|' \ - PKGBUILD - updpkgsums - git add PKGBUILD - git commit -m "Update ${package}" - - # Build the new package - makepkg -c - librestage - - # Publish the updates - git push - librerelease -} - -main "$@" diff --git a/bin/setup b/bin/setup deleted file mode 100755 index f421cbd..0000000 --- a/bin/setup +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/make -f - -CFLAGS += -std=c99 -Wall -Wextra -Werror -Wno-unused-parameter - -dirs = \ - $(HOME)/packages/pkgdest \ - $(HOME)/packages/srcdest \ - $(HOME)/packages/srcpkgdest \ - $(HOME)/packages/logdest \ - $(HOME)/packages/builddir - -all: \ - $(HOME)/bin/autobuild \ - $(HOME)/.ssh/id_rsa \ - $(HOME)/.ssh/id_rsa.pub \ - $(HOME)/.gnupg/secring.gpg \ - $(HOME)/packages/abslibre \ - $(dirs) - -autobuild $(HOME)/bin/autobuild: $(HOME)/bin/autobuild.c - $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@ && chmod 6755 $@ - -$(HOME)/.ssh/id_rsa $(HOME)/.ssh/id_rsa.pub: - ssh-keygen -N '' -f $@ - -$(HOME)/.gnupg/secring.gpg: | $(HOME)/.gitconfig - printf '%s\n' \ - 'Key-Type: default' \ - 'Subkey-Type: default' \ - "Name-Real: $(git config user.name)" \ - "Name-Email: $(git config user.email)" \ - 'Expire-Date: 0' \ - | gpg --gen-key --batch - -$(HOME)/packages/abslibre: - createworkdir - -$(dirs): %: - mkdir -p -- $@ - -.DELETE_ON_ERROR: -- cgit v1.2.3