From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:subject:to:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=NYO5nZs9FZCnOsw1+02Ay0Zmg2ybYojY9UM8D13Cp48=; b=B5u7Pl7CSXhgksOvC+lo/vIWGdCVdv9ZhYsiwes8D+ctxSPzXDTgohVP1VlEnaR8zN Y5n2LkzG/BGTx1uygAkIHhrZHY6s8NcZ78fFecDfUy4twI/nia+caskyURyIEOL2Uo2h 4jmfwHzjE7kyQ5Pgi4x6O5kaP/0Cb63P4CalSCWIJBmdCmw18UJAgGpZ+GpFL8TCP6PC Kkvt4Q748DJiZGncABaH09Ss/b21kT6LFWlwQbiwuaxHtdVZdN5MWA037Nn97pYVmQw+ tyIlerYBHu0DbgcvNGk3L5wz0McgkKQnBwePCucaTZLdurpcEZBdbM91pFQI7g7OYV0Q +HgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:subject:to:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=NYO5nZs9FZCnOsw1+02Ay0Zmg2ybYojY9UM8D13Cp48=; b=jlWzY+BVo7hpELaMWs/mgbmdqReaDeJ+dOF3ekrZ5tcMps7eyHKXaA1fC3/VmLR3v9 B0UztTrZMTqG7b7SOrqRfIZEE9Rwc6Vu9ib5Opy/3acElOmsT/XkENbXCsqoQB0dqrnV jqyWetnqeKzljRTBoQMvJaqP2wzQSqncikbIKmscyR6iSMxfZpfdVOHKLJPNX5OEpqOa hwSV7VadyTMIRGaao5IyXhh+As3DyCYk7MLeuqBA6pP4/Lm3HMGy7G050RroplAC7AUl IbPGfO5DKzj9OWiL737wSwi+GpKcJLIjlmsu921G0zPa6qb05OyP5/ud3HxlDRa+FOZK O4iA== X-Gm-Message-State: AOAM531+t2qoMmlHTRj/WvT4WkDBTCvvIBPxP3ZQYkchkxdbllUJGe8r z9OspgVnF4/gyOn7Uy77/9jd549njA4= X-Google-Smtp-Source: ABdhPJxRvsUa3rKSmjA0MXjZc5+LHI9ya6lp/DzSKFUsqSL5ORiPTyotsiwDXB0VebANzFqVNuKu/w== X-Received: by 2002:a05:6512:781:: with SMTP id x1mr10112244lfr.231.1632499139771; Fri, 24 Sep 2021 08:58:59 -0700 (PDT) From: Leonid Krivoshein To: make-initrd@lists.altlinux.org Message-ID: Date: Fri, 24 Sep 2021 18:58:58 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=windows-1251; format=flowed Content-Language: ru Content-Transfer-Encoding: 7bit Subject: [make-initrd] [PATCH v1 33/41] fork pipeline: bootchain-loop: primary changes X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Sep 2021 15:59:02 -0000 Archived-At: List-Archive: --- .../bootchain-core/data/sbin/bootchain-loop | 100 +++++++++++++----- 1 file changed, 71 insertions(+), 29 deletions(-) diff --git a/make-initrd/features/bootchain-core/data/sbin/bootchain-loop b/make-initrd/features/bootchain-core/data/sbin/bootchain-loop index 0b9fdd3..70a5bf6 100755 --- a/make-initrd/features/bootchain-core/data/sbin/bootchain-loop +++ b/make-initrd/features/bootchain-core/data/sbin/bootchain-loop @@ -2,53 +2,95 @@ . bootchain-sh-functions -stepnum=0 +stepnum="${stepnum:-0}" chainsteps="${chainsteps-}" -datadir= -destdir= +prevdir="${prevdir-}" + +debug() +{ + [ -z "$BC_DEBUG" ] || + message "$*" +} + + +rc=0 while [ -n "$chainsteps" ]; do name="${chainsteps%%,*}" exe="$handlerdir/$name" if [ -x "$exe" ]; then - eval "callnum=\"\${callnum_$name:-0}\"" - - datadir="$mntdir/src/pipe$stepnum" - destdir="$mntdir/dst/pipe$stepnum" + assign "callnum" "\${callnum_$name:-0}" + datadir="$mntdir/src/step$stepnum" + destdir="$mntdir/dst/step$stepnum" - [ "$stepnum" != 0 ] || - prevdir="" + run mkdir -p -- "$datadir" "$destdir" - mkdir -p -- "$datadir" "$destdir" - - if ! mountpoint -q "$destdir"; then + if mountpoint -q -- "$destdir" || + [ -s "$destdir/DEVNAME" ] || + [ -b "$destdir/dev" ] || + [ -c "$destdir/dev" ] + then + message "[$callnum] Handler: $exe skipped" + else message "[$callnum] Handler: $exe" export name callnum datadir destdir prevdir - rc=0 - "$exe" || rc=$? - - if [ "$rc" != 0 ]; then - [ "$rc" != 2 ] || + for try in 1 2 3 4 5; do + [ -z "$BC_DEBUG" ] || + run "$handlerdir/debug" ||: + rc=0 + run "$exe" || + rc=$? + [ "$rc" != 0 ] || break - message "[$callnum] Handler failed (rc=$rc)" - sleep 1 - continue - fi - else - message "[$callnum] Handler: $exe skipped" + [ "$rc" != 2 ] || [ -z "$pipeline_mode" ] || + break 2 + message "[$callnum] Handler failed (rc=$rc, try=$try)" + [ ! -f "$BC_PASSED/$PROG" ] || + break 2 + sleep 2 + done + + [ -r "$BC_NEXTCHAIN" ] || + run touch "$BC_PASSED/$name" + [ ! -f "$BC_PASSED/$PROG" ] || + break + [ "$rc" = 0 ] || + break fi - prevdir="$destdir" + if [ ! -r "$BC_NEXTCHAIN" ]; then + callnum=$((1 + $callnum)) + assign "callnum_$name" "\$callnum" + eval "export callnum_$name" + fi - callnum=$(($callnum + 1)) - eval "callnum_$name=\"\$callnum\"" + stepnum=$((1 + $stepnum)) + prevdir="$(readlink-e "$destdir" 2>/dev/null ||:)" fi - chainsteps="${chainsteps#$name}" - chainsteps="${chainsteps#,}" + if [ ! -r "$BC_NEXTCHAIN" ]; then + chainsteps="${chainsteps#$name}" + chainsteps="${chainsteps#,}" + else + debug "chain will be reloaded by $BC_NEXTCHAIN:" + fdump "$BC_NEXTCHAIN" + . "$BC_NEXTCHAIN" + run rm -f -- "$BC_NEXTCHAIN" + fi - stepnum=$(($stepnum + 1)) + debug "remaining steps: $chainsteps" done + +[ -z "$chainsteps" ] || + message "remaining steps after breaking loop: $chainsteps" + +if [ "$rc" = 2 ] && [ -n "$pipeline_mode" ]; then + debug "finishing in pipeline mode" +elif [ "$rc" = 0 ] && [ -f "$BC_PASSED/$PROG" ]; then + debug "finishing in bootchain mode" +else + fatal "daemon terminated incorrectly (rc=$rc)" +fi -- 2.21.0