summaryrefslogtreecommitdiff
path: root/configs/profile/rebuild.sh
blob: 29c47e1f2a584b1f229585d259c8d1ef1f6a30a7 (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

## rebuild.sh options ##
readonly PRESERVE_CACHE='false'    # preserve package cache in 'wipe' mode
readonly MODE='wipe'               # total wipe of work dir, optionally preserving package cache
# readonly MODE='rebuild'          # full update rebuild preserving work dir
# readonly MODE='tweak'            # apply chroot customization tweaks only

## build.sh options ##
readonly TARGET='dual'             # dual-arch                   (default)
# readonly TARGET='i686'           # i686 target only
# readonly TARGET='x86_64'         # x86_64 target only
# readonly EDITION='OpenRC/CLI'    # OpenRC/CLI init/WM-DE pair
# readonly EDITION='OpenRC/LXDE'   # OpenRC/LXDE init/WM-DE pair
readonly EDITION='SystemD/CLI'     # SystemD/CLI init/WM-DE pair (default)
# readonly EDITION='SystemD/LXDE'  # SystemD/LXDE init/WM-DE pair
readonly TALKING=''                # speech and braille disabled (default)
# readonly TALKING='-S'            # speech and braille enabled
readonly CACHE=''                  # net-install                 (default)
# readonly CACHE='-O'              # offline install
readonly VERSION="$(date +%Y.%m)"  # for ISO filename            (default)
# readonly VERSION="`date +%Y.%m.%d-%H.%M`-alpha"
readonly OUT_DIR=./out/new/


# prepare build command
readonly CMD="./build.sh -v -E $EDITION -T $TARGET $TALKING $CACHE -V $VERSION -o $OUT_DIR $*"


# sanity checks
((`id -u`)) && echo "This script must be run with root privileges." && exit || \
               echo "Preparing (${MODE} mode): ${CMD}"


# cleanup in case of previous aborted run
while pids=$(pidof ./rebuild.sh || pidof sudo ./rebuild.sh) && pids=${pids/$PPID/} && [ "$pids" ]
do    for pid in ${pids/$PPID/} ; do sudo kill -9 $pid ; done ; sleep 1 ;
done
for work_dir in "$PWD/work/i686" "$PWD/work/x86_64"
do  declare -a mountpoints=()
    for mnt in dev/pts dev/shm dev proc run sys tmp; do
        mountpoint=$(findmnt --noheadings --output="TARGET" "${work_dir}/root-image/${mnt}" || true)
        if [[ "${mountpoint}" != "" ]] ; then mountpoints=( ${mountpoints[@]} "${mountpoint}" ) ; fi ;
    done
    for mountpoint in ${mountpoints[@]} ; do umount "${mountpoint}" ; done ;
done


# prepare environment
if   [ "$MODE" == 'wipe' ]
then if [ "$PRESERVE_CACHE" == 'true' ]
     then for arch in i686 x86_64
          do  isorepo=./work/${arch}/root-image/isorepo
              cache_dir=./work/isorepo-${arch}
              mkdir -p $cache_dir
              [ -d $isorepo ] && mv $isorepo/* $cache_dir/ 2> /dev/null
          done
     fi

     rm -rf ./work/${arch} 2> /dev/null

     for arch in i686 x86_64
     do  isorepo=./work/${arch}/root-image/isorepo
         cache_dir=./work/isorepo-${arch}
         if [ "$PRESERVE_CACHE" == 'true' ]
         then if   [ "$TARGET" == 'dual' -o "$TARGET" == "${arch}" ]
              then mkdir -p $isorepo
                   mv $cache_dir/* $isorepo/
                   rmdir $cache_dir
              fi
         else rmdir $cache_dir 2> /dev/null
         fi
     done

elif [ "$MODE" == 'rebuild' ]
then rm -v ./work/build.make_*

elif [ "$MODE" == 'tweak' ]
then rm work/build.make_customize_root_image_$TARGET \
        work/build.make_prepare_$TARGET              \
        work/build.make_iso*                         2> /dev/null
fi


# start build
if   ${CMD}
then echo "success" ; rm ./continue.sh 2> /dev/null
else echo -e "failure executing:\n\t${CMD}\ncontinue with:\n\t./continue.sh [extra-args-to-build.sh]"
     echo -e "#!/bin/bash\n\n${CMD} \$*" > ./continue.sh
     chmod a+x ./continue.sh
fi


sudo chgrp -R wheel ./root-image/