set-up-environment.sh (Source)

  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
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
#!/bin/bash
##---------------------------------------------------------------------------##
#
#   Program: set-up-environment
#   Author:  Brian <genius@groupbcl.ca> :)
#   Date:    June 2016, major revisions January 2017
#
#   Automates the process of setting up a user environment for a live-boot
#   Linux distribution or virtual machine (works for both RPM and DEB based
#   environments):
#
#   * Creates a RAM-drive on /tmp
#   * Installs the BUUS (Brian's Useful Utilities Set) programs into /usr/local/bin
#   * Mounts a persistent storage volume for /home, if needed
#   * Installs and configures Midnight Commander
#   * Installs vim
#   * Sets up some useful things in /etc/profile.d/misc.sh
#   * Sets up a useful .vimrc for root and the live user
#
##---------------------------------------------------------------------------##
#   The script makes the following assumptions when it detects a live CD,
#   DVD, or USB drive environment:
#
#   * There is a file called 'home.img' somewhere in the file system of one
#     of the partitions on the drive. If the file isn't found in the
#     currently mounted file systems when this script is run, it locates any
#     other partitions on the drive, mounts them, and looks there. It
#     continues searching all available removable devices until home.img is
#     found or it runs out of drives to search. A failure to find home.img
#     is not fatal.
#
#   * The 'home.img' file is a mountable file system containing a home
#     directory, with subdirectories for the live user and '.common'. The
#     .common subdirectory contains directories for Documents, Downloads,
#     Music, Pictures, Public, .ssh (see below) and .mozilla, and these are
#     symlinked from the live user home directory to provide a common set of
#     directories between multiple live users. Note that the .kde and
#     Desktop directories are not shared in this fashion; each live user has
#     its own copy.
#
#   * The live user's home directory has to have its own .ssh directory and
#     its own .ssh/authorized_keys, but other files in the .ssh can be
#     symlinked to their counterparts in ../../.common/.ssh.
#
#   * There is a file called BUUS.tar.gz in the same subdirectory where the
#     home.img file is, or its parent directory. If it's not found there,
#     this script looks fit a copy in /tmp, and failing that retrieves a
#     copy from my NextCloud server.
##---------------------------------------------------------------------------##
#   Currently this script works with the following:
#   * My 8 GB Kingston DataTraveller G4 flash drive
#   * My "Penguin" flash drive with two partitions (now lost):
#     + Label 'FAT_PANGUIN', which has the live distribution on it
#     + Label 'EXT_PENGUIN', which has the 'home.img' file on it
#   * My 16 GB Kingston DT101 flash drive with a single partition 'DT101-16GB'
##---------------------------------------------------------------------------##
#   BUUS: This script is part of Brian's Useful Utilities Set
##---------------------------------------------------------------------------##

function run_step {
    echo "$1"
    if [ "$2" ] && [ -f "$2" -o -d "$2" ]
    then
        echo "* Processing has already been done"
        RC=0
    else
        shift 2
        RC=0
        while [ $RC = 0 -a "$1" ]
        do
            echo " >> $1"
            eval "$1"
            RC=$?
            [ $RC = 0 ] || echo "*** Command failed ***"
            shift
        done
    fi
    echo
}

function die { echo "$1" >&2; exit 1; }

[ -r /etc/shadow ] || die "Must run as root--try 'sudo $0'"

#--- Determine which distribution we're runnning
if [ -f /etc/os-release ]
then
    . /etc/os-release
elif [ -f /etc/redhat-release ]
then
    # Example: CentOS release 5.8 (Final)
    eval "$(awk 'match($0,/^(.*) release (.*)/,a) {
        print "NAME=\"" a[1] "\" VERSION_ID=\"" a[2] "\""
    }' /etc/redhat-release)"
fi
[ "$VERSION_ID" ] || die "Unable to determine distribution name and version"
echo -e "Running on Linux distribution '$NAME' version $VERSION_ID\n"

#--- Is there a user other nthan root on the system? ---
LIVE_USER="$(ls /home | head -n 1)"
[ "$LIVE_USER" ] && LIVE_GID="$(awk -F: "/^$LIVE_USER/{print \$4}" /etc/passwd)"

#--- Are we on a Live CD/DVD/USB system?
mount | grep -q squashfs && LIVE_ENV=true || LIVE_ENV=false

#--- Determine which package manager is available
[ -x /usr/bin/rpm -o -x /bin/rpm ] && PKG='rpm' INSTALLER='rpm -Uvh'
[ -x /usr/bin/yum -o -x /bin/yum ] && PKG='rpm' INSTALLER='yum install -y'
[ -x /usr/bin/dnf -o -x /bin/dnf ] && PKG='rpm' INSTALLER='dnf install -y'
[ -x /usr/bin/apt-get -o -x /bin/apt-get ] && PKG='deb' INSTALLER='apt-get install'

#--- Set up RAM drive on /tmp
run_step 'Set up RAM drive on /tmp' '/tmp' \
    'mkdir /tmp' \
    'mount -t tmpfs tmpfs /tmp' \
    'touch -r /etc/fstab /tmp/x1' \
    'echo "tmpfs /tmp tmpfs defaults 0 0" >>/etc/fstab' \
    'grep -e "^#" /etc/fstab | grep -v "^[[:space:]]*\$" >/tmp/x2' \
    'egrep -v -e "^[[:space:]]\$" -e "^#" /etc/fstab | column -t >>/tmp/x2' \
    'touch -r /tmp/x1 /tmp/x2' \
    'cat /tmp/x2 >/etc/fstab' \
    'touch -r /tmp/x2 /etc/fstab' \
    'rm -f /tmp/x1 /tmp/x2'

# Locate the device where home.img and BUUS.tar.gz are stored.  Sometimes I
# split a USB device into multiple partitions, with the persistent home
# filesystem on a different partition. Look for that partition and mount it if
# necessary.
if $LIVE_ENV
then
    echo "Searching for 'home.img'"

    BLKID_FILE='/dev/shm/blkid.text'
    blkid >$BLKID_FILE

    # First try the mounted filesystems
    for DIR in $(mount | grep '^/dev/[sh]d[a-z]' | cut -f3 -d' ')
    do
        echo "* $DIR"
        HOME_IMG_PATH_AND_FN="$(find $DIR -name home.img | head -n 1)"
        [ "$HOME_IMG_PATH_AND_FN" ] && break
    done

    # Now try the unmounted partitions on removable devices
    if [ ! "$HOME_IMG_PATH_AND_FN" ]
    then
        # Check all the disc devices in /sys/block
        cd /sys/block
        for DEV in [sh]d[a-z]
        do
            [ "$(cat $DEV/removable)" = 1 ] || continue
            # If it's removable, check the partitions
            cd $DEV
            for PARTITION in ${DEV}[0-9]*
            do
                mount | grep -q "^/dev/$PARTITION" && continue
                # We found a partition that isn't mounted. Try mounting it.
                LABEL="$(echo $PARTITION | tr '[a-z]' '[A-Z')"
                eval "$(grep ^/dev/$PARTITION $BLKID_FILE | cut -f2- -d' ')"
                X_MOUNT_PT="/dev/shm/$LABEL"
                echo "* /dev/$PARTITION ($LABEL)"
                mkdir $X_MOUNT_PT
                mount /dev/$PARTITION $X_MOUNT_PT >/dev/null 2>&1
                [ $? = 0 ] && HOME_IMG_PATH_AND_FN="$(find $X_MOUNT_PT -name home.img | head -n 1)"
                [ "$HOME_IMG_PATH_AND_FN" ] && break
                umount $X_MOUNT_PT >/dev/null 2>&1
                rmdir $X_MOUNT_PT
            done
        done
    fi
    # Did we find it?
    [ "$HOME_IMG_PATH_AND_FN" ] && echo "* Found at $HOME_IMG_PATH_AND_FN" || echo "* Could not find partition!"
    echo
fi

#--- Set up /usr/local/bin
if [ "$HOME_IMG_PATH_AND_FN" ]
then
    BUUS_PATH=$(dirname $HOME_IMG_PATH_AND_FN)
    [ -f $BUUS_PATH/BUUS.tar.gz ] || BUUS_PATH=$(dirname $BUUS_PATH)
    [ -f $BUUS_PATH/BUUS.tar.gz ] && run_step 'Set up /usr/local/bin' \
        '/usr/local/bin/pause' \
        'cd /usr/local/bin' \
        "tar xzf $BUUS_PATH/BUUS.tar.gz"
elif [ -f /tmp/BUUS.tar.gz ]
then
    run_step 'Set up /usr/local/bin from /tmp/BUUS.tar.gz' \
        '/usr/local/bin/pause' \
        'cd /usr/local/bin' \
        'tar xzf /tmp/BUUS.tar.gz' \
        'rm -f  /tmp/BUUS.tar.gz'
else
    run_step 'Set up /usr/local/bin from BUUS.tar.gz on NextCloud at penguin' \
        '/usr/local/bin/pause' \
        'curl -s http://renyamon.dyns.net/nextcloud/index.php/s/IFz4KpywiPru4Fr/download >/tmp/BUUS.tar.gz' \
        'cd /usr/local/bin' \
        'tar xzf /tmp/BUUS.tar.gz' \
        'rm -f  /tmp/BUUS.tar.gz'
fi

#--- Set up /etc/profile.d/misc.sh'
run_step 'Set up /etc/profile.d/misc.sh' '/etc/profile.d/misc.sh' \
    'echo "TMOUT=900
export EDITOR=vim
export HISTCONTROL=ignoreboth
shopt -s no_empty_cmd_completion" >/etc/profile.d/misc.sh'

#--- Mount persistent storage over /home, if needed (e.g. Linux Mint)
if $LIVE_ENV
then
    echo "Set up persistent storage for /home"
    if ! mount | grep -q 'on /home'
    then
        # Mount 'home.img' over /home. The file name 'home.img' is forced by Fedora,
        # because it uses a file with that name to hold the contents of the home
        # filesystem. Ubuntu live distributions (well, Linux Mint) don't mount
        # anything over /home by default, so we do it here.
        if [ "$HOME_IMG_PATH_AND_FN" ]
        then
            run_step "Mount 'home.img' over /home" \
                "/home/$LIVE_USER/Setup" \
                "mount -o loop,noatime $HOME_IMG_PATH_AND_FN /home"
        else
            echo "* FAILED: Could not find 'home.img'"
        fi
    else
        echo -e "* Processing has already been done\n"
    fi
fi

#--- Ensure the live user can work with /home/.common
if [ -d /home/.common ]
then
    COMMON_OWNER="$(ls -ld /home/.common | awk '{ print $3 }')"
    [ $COMMON_OWNER != $LIVE_USER ] &&
        run_step "Give ownership of /home/.common to $LIVE_USER" \
        '' "chown -R $LIVE_USER:$LIVE_USER /home/.common"
fi

#--- If not a live system, see if we can mount a CD/DVD on the assumption
# this is a VM recently installed from a virtual CD/DVD
HAVE_CD_DVD=false
if ! $LIVE_ENV
then
    run_step 'Attempt to mount CD/DVD' '/tmp/mnt' \
        'mkdir /tmp/mnt' \
        'mount /dev/cdrom /tmp/mnt'
    [ $RC = 0 ] && HAVE_CD_DVD=true
fi

#-- Install the Midnight Commander, if we can find the package(s)
if [ "$INSTALLER" -a ! -f /usr/bin/mc ]
then
    SETUP_DIR="/home/.common/Setup/$NAME-$VERSION_ID"
    if [ -d "$SETUP_DIR/mc" ]
    then
        MC_PACKAGE="${SETUP_DIR}/mc/*.$PKG"
    else
        echo "'$SETUP_DIR' was not found"
        echo "Attempting to install Midnight Commander using a package manager"
        MC_PACKAGE='mc'
        if $HAVE_CD_DVD
        then
            echo "> Searching CD/DVD for mc packages"
            MC_PACKAGE="$(find /tmp/mnt -type f | grep /mc- | tr '\n' ' ')"
            if [ "$MC_PACKAGE" ]
            then
                echo " * $MC_PACKAGE"
            else
                echo "  * Not found; falling back to 'mc'"
                MC_PACKAGE='mc'
            fi
        fi
    fi
    run_step 'Install Midnight Commander' '/usr/bin/mc' \
        "$INSTALLER $MC_PACKAGE"
fi

# Set up Midnighter Commander's configuration
if [ -x /usr/bin/mc ]
then
    MC_CONFIG=B     # Version 4.8 and above
    MC_DATA_DN="$(mc -F 2>&1 | awk '/^.User data/{SW=1};SW && /Config dir/{print$3}')"
    [ "$MC_DATA_DN" ] || MC_CONFIG='A' MC_DATA_DN='/root/.mc'
    run_step "Set up root's Midnight Commander configuration" \
        "$MC_DATA_DN/ini" \
        "[ -d $MC_DATA_DN ] || mkdir $MC_DATA_DN" \
        "sed '1,/mc-config.${MC_CONFIG}.tar.gz.b64/d' $0 | sed '/____ END/,\$d' | base64 -id | tar xzf - -C $MC_DATA_DN" \
        "chown -R root:root $MC_DATA_DN"

    # Set one up for the user as well
    if [ "$LIVE_USER" ]
    then
        ROOT_MC_DATA_DN=$MC_DATA_DN
        MC_DATA_DN="${MC_DATA_DN/\/root//home/$LIVE_USER}"
        run_step "Set up ${LIVE_USER}'s Midnight Commander configuration" \
            "$MC_DATA_DN/ini" \
            "[ -d $MC_DATA_DN ] || mkdir $MC_DATA_DN" \
            "cp -a $ROOT_MC_DATA_DN $MC_DATA_DN" \
            "chown -R $LIVE_USER:$LIVE_GID $MC_DATA_DN"
    fi

    # Set up /etc/profile.d/mc.sh, if needed
    [ -f /usr/libexec/mc/mc-wrapper.sh ] && MC_WRAPPER="/usr/libexec/mc/mc-wrapper.sh"  # RedHat
    [ -f /usr/lib/mc/mc-wrapper.sh ] && MC_WRAPPER="/usr/lib/mc/mc-wrapper.sh"          # Debian
    [ $RC = 0 -a "$MC_WRAPPER" ] && run_step "Add 'mc' alias to /etc/profile.d/mc.sh" \
        '/etc/profile.d/mc.sh' \
        "echo \"alias mc='. $MC_WRAPPER'\" >/etc/profile.d/mc.sh"
fi

#--- If packages are available, install vim
VI="$(which vi)"
VI_DN="$(dirname $VI)"

if [ -d "$SETUP_DIR/vim" ]
then
    [ $NAME = 'Fedora' ] && FORCE='--force '
    run_step "Install vim" "$VI_DN/vim" \
        "${INSTALLER} ${FORCE}${SETUP_DIR}/vim/*.$PKG"
#--- Else link /bin/vi to /bin/vim
else
    run_step "Link $VI_DN/vi to $VI_DN/vim" \
        "$VI_DN/vim" "ln $VI_DN/vi $VI_DN/vim"
fi

#--- Set up .vimrc
run_step "Set up .vimrc" '/root/.vimrc' \
    'echo -e "set number background=dark tabstop=4\nau vimEnter * NoMatchParen" >~root/.vimrc' \
    "[ '$LIVE_USER' ] && cp -a ~root/.vimrc /home/$LIVE_USER/.vimrc" \
    "[ '$LIVE_USER' ] && chown $LIVE_USER:$LIVE_GID /home/$LIVE_USER/.vimrc"

#--- Open port 22 in the firewall
# (Is iptables running? Is port 22 already open?)
iptables -L | grep -qve '^[[:space:]]*$' -e '^Chain' -e '^target' &&
    iptables -L | grep -q 'dpt:ssh' && touch /tmp/port_22_is_open
run_step "Open port 22 in the firewall" '/tmp/port_22_is_open' \
    'iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT'
[ -f /tmp/port_22_is_open ] && rm -f /tmp/port_22_is_open

#--- Start sshd
run_step "Start sshd" '/var/tmp/.sshd_started' \
    'systemctl start sshd' \
    'touch /var/tmp/.sshd_started' \
    "ip addr | egrep '^[[:space:]].*inet ' | grep -v 'lo$'"

#--- Set up my public key in ~USER/.ssh
if [ $LIVE_USER ]
then
    SSH_DN="/home/$LIVE_USER/.ssh"
    PK="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyuEV2KC1CQKbSSkf4eEM2l556e2pUAeXvVjAS6"
    PK="${PK}w+4eoahCp+FzQ/D0q5I0Q81GbOe9HlZC3pIA6IzZQPQ0ncy0WJSM785Be0zX+1AYHOqqz"
    PK="${PK}qcp2Vxbjx35iiU3WTbUVqQ+fP/KvKUWe/4Z+ge7S/WBVJQmdtRUaA4+ZbJyZJlQ9zo1iu"
    PK="${PK}ztrILgf0z9VCgJLbkpH34O9GS9PLEXPtVKBJifAt3fK6U4M1SB4MzgRqDGLRwVQLavFU4"
    PK="${PK}524BqzRu4vuZPv43nnobnT+YkEOdUD0NpxrrDzJn8tcHc/YS1VIaf3vh/epfPMdyXhE6p"
    PK="${PK}1HqUS625fkTRp/yyO7nacKWMwbQw== brian@sparrow.renyamon.net"
    run_step "Set up $SSH_DN" "$SSH_DN/authorized_keys" \
        "[ -d $SSH_DN ] || mkdir $SSH_DN" \
        "echo '$PK' > $SSH_DN/authorized_keys" \
        "chown -R $LIVE_USER:$LIVE_GID $SSH_DN" \
        "chmod 700 $SSH_DN" "chmod 600 $SSH_DN/authorized_keys"
fi

#--- (Re)build the 'mlocate' database
UPDATEDB="$(which updatedb)"
if [ $UPDATEDB ]
then
    run_step "Rebuild 'mlocate' database" \
        '/dev/shm/updatedb.text' \
        'nohup updatedb >/dev/shm/updatedb.text 2>&1 &'
else
    echo "Rebuild 'mlocate' database"
    echo -e "* Unable to build database--'updatedb' not found\n"
fi

exit

# _____ mc-config.A.tar.gz.b64 _____
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
# _____ END  _____

# _____ mc-config.B.tar.gz.b64 _____
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
ygAoAAA=
# _____ END ____

# vim: tabstop=4