]> git.ipfire.org Git - people/jschlag/ipfire-3.x-image.git/commitdiff
Add chroot wrapper
authorJonatan Schlag <jonatan.schlag@ipfire.org>
Sun, 23 Jun 2019 13:18:16 +0000 (15:18 +0200)
committerJonatan Schlag <jonatan.schlag@ipfire.org>
Sun, 23 Jun 2019 13:18:16 +0000 (15:18 +0200)
Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
functions.sh

index 6e28793fd58fd7d8346f5cbb5bada5fef73b7196..095e3dda12f8b88df08d3666a8891892e181f17e 100644 (file)
@@ -318,3 +318,35 @@ parse_cmdline() {
        done
 }
 
+chroot_wrapper() {
+       local chroot_dir="${1}"
+
+       shift
+
+       local command
+
+       if [ ! -d ${chroot_dir} ]; then
+               log ERROR "Cannot chroot in a non directory ${chroot_dir}"
+       fi
+
+       mount proc "${chroot_dir}/proc" -t proc -o nosuid,noexec,nodev
+       mount sys "${chroot_dir}/sys" -t sysfs -o nosuid,noexec,nodev,ro
+       mount udev "${chroot_dir}/dev" -t devtmpfs -o mode=0755,nosuid
+       mount devpts "${chroot_dir}/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec
+       mount shm "${chroot_dir}/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev
+       mount /run "${chroot_dir}/run" --bind
+       mount tmp "${chroot_dir}/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
+
+       for command in "$@"
+       do
+               cmd chroot "${chroot_dir}" "${command}"
+       done
+
+       umount "${chroot_dir}/proc"
+       umount "${chroot_dir}/sys"
+       umount "${chroot_dir}/dev/pts"
+       umount "${chroot_dir}/dev/shm"
+       umount "${chroot_dir}/dev"
+       umount "${chroot_dir}/run"
+       umount "${chroot_dir}/tmp"
+}