home · contact · privacy
Move towards idempotency for start_*.sh scripts. master
authorPlom Heller <plom@plomlompom.com>
Wed, 9 Sep 2026 04:55:57 +0000 (06:55 +0200)
committerPlom Heller <plom@plomlompom.com>
Wed, 9 Sep 2026 04:55:57 +0000 (06:55 +0200)
setup_scripts/_lib.sh
setup_scripts/start_user.sh

index eeeee826adcd99abef8b4445749b98798bfae147..e391142a58956f72f3d9dfbfd5090632ba64d5ba 100644 (file)
@@ -202,8 +202,11 @@ usage() {
         || die "${MSG}"
 }
 augment_profile() {
+    local ALIAS_LS='alias ls="ls --color=auto"'
     msg 'Augmenting user %s …' "${FNAME_PROFILE}"
-    echo 'alias ls="ls --color=auto"' >> "${PATH_PROFILE}"
+    # test ensures idempotency
+    grep -qxF "${ALIAS_LS}" "${PATH_PROFILE}" 2>/dev/null\
+        || echo "${ALIAS_LS}" >> "${PATH_PROFILE}"
 }
 start_root() {
     local TARGET=$1
@@ -221,9 +224,13 @@ start_root() {
     msg 'Ensuring packages: %s' "${TO_INSTALL}"
     apt-get -y install ${TO_INSTALL}
 
-    msg 'Setting up user: %s' "${USERNAME}"
-    adduser --disabled-password --comment "" "${USERNAME}"
-    retry_until_success passwd "${USERNAME}"
+    if try_quiet id -u "${USERNAME}"; then
+        msg 'User %s already exists, skipping creation …' "${USERNAME}"
+    else
+        msg 'Setting up user: %s' "${USERNAME}"
+        adduser --disabled-password --comment "" "${USERNAME}"
+        retry_until_success passwd "${USERNAME}"
+    fi
     usermod -a -G sudo "${USERNAME}"
 
     augment_profile
index ccb3f547a17064dcc123c0b43bab59193334d57d..778d1d41aea68f5e8d328ddccf5cebdc615b48a6 100755 (executable)
@@ -6,5 +6,11 @@ PATH_SKEL_USER="${PATH_REPO}/home_user"
 
 augment_profile
 msg 'Linking %s files into home directory …' "${PATH_SKEL_USER}"
-find "${PATH_SKEL_USER}" -mindepth 1 -maxdepth 1\
-    -exec ln -v -s {} "${HOME}/" \;
+find "${PATH_SKEL_USER}" -mindepth 1 -maxdepth 1 | while IFS= read -r SRC; do
+    DEST="${HOME}/$(basename "${SRC}")"
+    if [ -e "${DEST}" ] || [ -L "${DEST}" ]; then
+        msg 'Skipping already-found %s …' "${DEST}"
+    else
+        ln -v -s "${SRC}" "${DEST}"
+    fi
+done