-
Notifications
You must be signed in to change notification settings - Fork 13
/
pkrootfs.bash
executable file
·79 lines (66 loc) · 3.07 KB
/
pkrootfs.bash
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
72
73
74
75
76
77
78
79
#! /bin/bash
###########################################################################
# GLUED: GNU/Linux Uniform Environment Distribution #
# Copyright (C) 2007-2021 Universidade do Porto - Faculdade de Engenharia #
# Laboratório de Sistemas e Tecnologia Subaquática (LSTS) #
###########################################################################
# 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 2 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, write to the Free Software #
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #
# 02110-1301 USA. #
###########################################################################
# Author: Ricardo Martins #
###########################################################################
# Check shell type.
if [ -z "$BASH_VERSION" ]; then
echo "ERROR: you must use bash to run this script."
exit 1
fi
if [ $# -ne 1 ]; then
echo "Usage: $0 <config>"
exit 1
fi
if ! [ -f "$1" ]; then
echo "ERROR: configuration file '$1' does not exist."
exit 1
fi
source "$1"
fakeroot_state='/tmp/.glued-fakeroot'
fakeroot="$cfg_dir_toolchain/bin/fakeroot -s $fakeroot_state -i $fakeroot_state"
rm "$fakeroot_state" && touch "$fakeroot_state"
$fakeroot -- chown -vR root:root "$cfg_dir_rootfs"
for d in bin sbin lib usr/bin usr/sbin usr/lib; do
$fakeroot -- chmod -vR 0755 "$cfg_dir_rootfs"/$d
$fakeroot -- chmod -vR 0755 "$cfg_dir_rootfs"/$d/*
$fakeroot -- chown -vR root:root "$cfg_dir_rootfs"/$d/*
done
for d in dev boot etc; do
$fakeroot -- chmod -vR 0755 "$cfg_dir_rootfs"/$d
$fakeroot -- chmod -vR 0644 "$cfg_dir_rootfs"/$d/*
done
# Copy DTB.
if [ -n "$cfg_target_linux_dtb" ]; then
cp -v "$cfg_dir_rootfs/boot/$(basename $cfg_target_linux_dtb)" "$cfg_dir_rootfs/boot/board.dtb"
fi
# Write config vars.
set | sort | grep ^cfg_ | egrep -v '^cfg_dir|^cfg_target|^cfg_host_|^cfg_toolchain|^cfg_rootfs_tar|^cfg_partitions' > "$cfg_dir_rootfs/etc/config"
$fakeroot -- chmod -v 0700 "$cfg_dir_rootfs/root"
$fakeroot -- chmod -v 1777 "$cfg_dir_rootfs/tmp" "$cfg_dir_rootfs/var/tmp"
$fakeroot -- tar \
-p \
-j \
-c \
-v \
-C "$cfg_dir_rootfs" \
-f "$cfg_rootfs_tar" \
.