Skip to content

Commit

Permalink
mkdeb.sh.in: pass remaining arguments to ./configure
Browse files Browse the repository at this point in the history
Currently, mkdeb.sh (which is used to make a .deb package) runs
./configure with hardcoded options (some of which are automatically
detected based on configure-time variables).  To work around the
hardcoding, contrib/fj-mkdeb.py is used to add additional options by
rewriting the actual call to ./configure on mkdeb.sh.  For example, the
following invocation adds --disable-firetunnel to mkdeb.sh:

    $ ./configure && ./contrib/fj-mkdeb.py --disable-firetunnel

To avoid depending on another script and to avoid re-generating
mkdeb.sh, just let the latter pass the remaining arguments (the first
one is an optional package filename suffix) to ./configure directly.
Example:

    $ make distclean && ./configure && make dist &&
      ./mkdeb.sh "" --disable-firetunnel

Additionally, change contrib/fj-mkdeb.py to do roughly the same as the
above example, by simply forwarding the arguments that it receives to
./mkdeb.sh (which then forwards them to ./configure).  Also, remove the
--only-fix-mkdeb option, since the script does not change mkdeb.sh
anymore.  With these changes, the script's usage (other than when using
--only-fix-mkdeb) should remain the same.

Note: To clean the generated files and then make a .deb package using
the default configuration, the invocation is still the same:

    $ make distclean && ./configure && make deb

Note2: Running ./configure in the above examples is only needed for
generating Makefile/mkdeb.sh from Makefile.in/mkdeb.sh.in after running
distclean, so that running `make` / `./mkdeb.sh` afterwards works.

Should fully fix netblue30#772.

Relates to netblue30#1205 netblue30#3414 netblue30#5148.
  • Loading branch information
kmk3 committed May 29, 2022
1 parent b4d0b24 commit 9a0fbbd
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 38 deletions.
2 changes: 1 addition & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ build_apparmor:
script:
- apt-get update -qq
- DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential lintian libapparmor-dev pkg-config gawk
- ./configure --prefix=/usr --enable-apparmor && make deb-apparmor && dpkg -i firejail*.deb
- ./configure && make deb-apparmor && dpkg -i firejail*.deb
- command -V firejail && firejail --version
- firejail --version | grep -F 'AppArmor support is enabled'

Expand Down
2 changes: 1 addition & 1 deletion Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ deb: dist
./mkdeb.sh

deb-apparmor: dist
./mkdeb.sh -apparmor
./mkdeb.sh -apparmor --enable-apparmor

test-compile: dist
cd test/compile; ./compile.sh $(NAME)-$(VERSION)
Expand Down
40 changes: 14 additions & 26 deletions contrib/fj-mkdeb.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
# Copyright (C) 2014-2022 Firejail Authors
# License GPL v2

# This script automates the workaround for https://github.com/netblue30/firejail/issues/772
# This script automates the creation of a .deb package. It was originally
# created to work around https://github.com/netblue30/firejail/issues/772

import os, shlex, subprocess, sys
import os, subprocess, sys


def run(srcdir, args):
Expand All @@ -15,55 +16,42 @@ def run(srcdir, args):
print('Error: Not a firejail source tree? Exiting.')
return 1

dry_run = False
escaped_args = []
# We need to modify the list as we go. So be sure to copy the list to be iterated!
# Ignore unsupported arguments.
for a in args[:]:
if a.startswith('--prefix'):
# prefix should ALWAYS be /usr here. Discard user-set values
args.remove(a)
elif a == '--only-fix-mkdeb':
# for us, not configure
dry_run = True
args.remove(a)
else:
escaped_args.append(shlex.quote(a))

# Remove generated files.
if not dry_run:
distclean = subprocess.call(['make', 'distclean'])
if distclean != 0:
return distclean
distclean = subprocess.call(['make', 'distclean'])
if distclean != 0:
return distclean

# Run configure to generate mkdeb.sh.
first_config = subprocess.call(['./configure', '--prefix=/usr'] + args)
if first_config != 0:
return first_config

# Fix up dynamically-generated mkdeb.sh to include custom configure options.
with open('mkdeb.sh', 'rb') as f:
sh = str(f.read(), 'utf_8')
with open('mkdeb.sh', 'wb') as f:
f.write(bytes(sh.replace('./configure $CONFIG_ARGS',
'./configure $CONFIG_ARGS ' + (' '.join(escaped_args))), 'utf_8'))

if dry_run: return 0
# Create the dist file used by mkdeb.sh.
make_dist = subprocess.call(['make', 'dist'])
if make_dist != 0:
return make_dist

return subprocess.call(['make', 'deb'])
# Run mkdeb.sh with the custom configure options.
return subprocess.call(['./mkdeb.sh'] + args)


if __name__ == '__main__':
if len(sys.argv) == 2 and sys.argv[1] == '--help':
print('''Build a .deb of firejail with custom configure options
usage:
{script} [--fj-src=SRCDIR] [--only-fix-mkdeb] [CONFIGURE_OPTIONS [...]]
{script} [--fj-src=SRCDIR] [CONFIGURE_OPTIONS [...]]
--fj-src=SRCDIR: manually specify the location of firejail source tree
as SRCDIR. If not specified, looks in the parent directory
of the directory where this script is located, and then the
current working directory, in that order.
--only-fix-mkdeb: don't run configure or make after modifying mkdeb.sh
CONFIGURE_OPTIONS: arguments for configure
'''.format(script=sys.argv[0]))
sys.exit(0)
Expand Down
12 changes: 2 additions & 10 deletions mkdeb.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,9 @@
set -e
NAME=@PACKAGE_NAME@
VERSION=@PACKAGE_VERSION@
HAVE_APPARMOR=@HAVE_APPARMOR@
HAVE_SELINUX=@HAVE_SELINUX@
EXTRA_VERSION=$1

CONFIG_ARGS="--prefix=/usr"
if [ -n "$HAVE_APPARMOR" ]; then
CONFIG_ARGS="$CONFIG_ARGS --enable-apparmor"
fi
if [ -n "$HAVE_SELINUX" ]; then
CONFIG_ARGS="$CONFIG_ARGS --enable-selinux"
fi
test "$#" -gt 0 && shift

CODE_ARCHIVE="$NAME-$VERSION.tar.xz"
CODE_DIR="$NAME-$VERSION"
Expand All @@ -36,7 +28,7 @@ echo "*****************************************"
tar -xJvf "$CODE_ARCHIVE"
#mkdir -p "$INSTALL_DIR"
cd "$CODE_DIR"
./configure $CONFIG_ARGS
./configure --prefix=/usr "$@"
make -j2
mkdir debian
DESTDIR=debian make install-strip
Expand Down

0 comments on commit 9a0fbbd

Please sign in to comment.