summaryrefslogtreecommitdiff
path: root/src/chroot-tools/arch-nspawn.patch
blob: 5ebda46361f30a903c7b2178832c1bc748dfca9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
--- arch-nspawn.in	2016-05-09 18:37:11.684488405 -0400
+++ arch-nspawn.ugly	2016-05-11 01:33:29.914317415 -0300
@@ -1,4 +1,6 @@
 #!/bin/bash
+# License: GNU GPLv2
+#
 # 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; version 2 of the License.
@@ -14,6 +16,8 @@
 
 working_dir=''
 
+files=()
+
 usage() {
 	echo "Usage: ${0##*/} [options] working-dir [systemd-nspawn arguments]"
 	echo "A wrapper around systemd-nspawn.  Provides support for pacman."
@@ -22,17 +26,21 @@
 	echo '    -C <file>     Location of a pacman config file'
 	echo '    -M <file>     Location of a makepkg config file'
 	echo '    -c <dir>      Set pacman cache'
+	echo '    -f <file>     Copy file from the host to the chroot'
+	echo '    -s            Do not run setarch'
 	echo '    -h            This message'
 	exit 1
 }
 
 orig_argv=("$@")
 
-while getopts 'hC:M:c:' arg; do
+while getopts 'hC:M:c:f:s' arg; do
 	case "$arg" in
 		C) pac_conf="$OPTARG" ;;
 		M) makepkg_conf="$OPTARG" ;;
 		c) cache_dir="$OPTARG" ;;
+		f) files+=("$OPTARG") ;;
+		s) nosetarch=1 ;;
 		h|?) usage ;;
 		*) error "invalid argument '%s'" "$arg"; usage ;;
 	esac
@@ -78,6 +86,12 @@
 	[[ -n $pac_conf ]] && cp $pac_conf "$working_dir/etc/pacman.conf"
 	[[ -n $makepkg_conf ]] && cp $makepkg_conf "$working_dir/etc/makepkg.conf"
 
+	local file
+	for file in "${files[@]}"; do
+		mkdir -p "$(dirname "$working_dir$file")"
+		cp -T "$file" "$working_dir$file"
+	done
+
 	sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${cache_dirs[@]})|g" -i "$working_dir/etc/pacman.conf"
 }
 # }}}
@@ -92,11 +106,15 @@
 fi
 
 build_mount_args
+cache_dirs+=('/repo/')
 copy_hostconf
 
+if [[ -z $nosetarch ]]; then
 eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")
+export _setarch=${CARCH:+setarch "$CARCH"}
+fi
 
-exec ${CARCH:+setarch "$CARCH"} systemd-nspawn -q \
+exec $_setarch systemd-nspawn -q \
 	-D "$working_dir" \
 	--register=no \
 	"${mount_args[@]}" \