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=ZDAy+P+6bf6plBeSzOKk6AoUMmT/+x4FvKshk3/Sa6U=; b=RWx/2u9q+ibFfplJqugdYRpakSoq2lFhO9Sh9vGHnKv8sO3I8TeAFVHc3v3MMb07u1 2A1ZVry0U0CYZR3ZpDOAeI6e+jGoTFLgDZzQjMchwQRjphDu2CBO/5TzM8lCrX0d6/Cn P5XOijLxtFS5fw3xvcRsM4Aua05pUyeiOd0r1y88R7ogC++CKBilFquadzrVex0D7hGG JWKGQIKA+rlnuRlDFVZaHKsTVOJPOhBmitvPNLtte8DkbUHDnqANKsXIRGY4nuSAS1u2 vm4Mw4UGdSjmaXrxyXYUyMMOGlWUorcR+R12SInbs16P2LXYoohFI7UDJIKyUc5VV7hy u2DQ== 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=ZDAy+P+6bf6plBeSzOKk6AoUMmT/+x4FvKshk3/Sa6U=; b=gVju+O1uN/nOitQ35/TTi6Q/0f24O3nao+C3+Yp8zHUPj5ecteT/4FJCO1M6OUCk5n rFR3mYGfpI4fR+r6V3cIcnmHVJdsCNtsaiMfDSbY/zZttOVnIx/q0JzquO6/nsiYAcBh j6SCdPp0poLMrSRPvXZOObbifn7ln4AIfol3nrY1RY3+XNLz4xHcuVb5AN7cPBvJ9bui Vd0r72J3DQjp/ygZ4xD7GqFT2BCV2cI5XAHpsfLL4rVyYaDbJYXVOhhjMAFN0kBfeR+t 4E1Nd7BaYwp/FdtdGUZ1e6C1QINQZpXu2FUpQHW2fr9Z8YlhHPq1qdgtSTshL8VTrlKD 10Gw== X-Gm-Message-State: AOAM531LkHs1gmk94lMPw4rXPARLJ5b7NfZ+yF+7KJCCmWS7zn/3pq9a J1xA80Vd3QsDpWwvRkArVuOuhlFr7Hc= X-Google-Smtp-Source: ABdhPJyn81KtVK2NdhJr85had1zo8ewkoyR35XkE3qt9TtJvgNL74YpeyqTzgh0FVvSfxyWOlDcXAg== X-Received: by 2002:ac2:4c81:: with SMTP id d1mr10150720lfl.340.1632498959849; Fri, 24 Sep 2021 08:55:59 -0700 (PDT) From: Leonid Krivoshein To: make-initrd@lists.altlinux.org Message-ID: <9eec5115-bc86-feb9-2a65-d5a3aed444ed@gmail.com> Date: Fri, 24 Sep 2021 18:55:59 +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 06/41] fork pipeline: bootchained is a 100% copy of pipelined 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:56:02 -0000 Archived-At: List-Archive: --- .../bootchain-core/data/sbin/bootchained | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100755 make-initrd/features/bootchain-core/data/sbin/bootchained diff --git a/make-initrd/features/bootchain-core/data/sbin/bootchained b/make-initrd/features/bootchain-core/data/sbin/bootchained new file mode 100755 index 0000000..1d30061 --- /dev/null +++ b/make-initrd/features/bootchain-core/data/sbin/bootchained @@ -0,0 +1,87 @@ +#!/bin/bash -efu + +. shell-error +. shell-signal + +message_time=1 +pidfile="/var/run/$PROG.pid" +logfile="/var/log/$PROG.log" + +exit_handler() +{ + local rc="$?" + trap - EXIT + rm -f -- "$pidfile" + exit $rc +} + +[ ! -f "$pidfile" ] || + fatal "already running" + +set_cleanup_handler exit_handler +echo "$$" >"$pidfile" + +. pipeline-sh-functions + + +[ "${RDLOG-}" != 'console' ] || + logfile=/dev/console + +exec >"$logfile" 2>&1 +message "Starting server ..." + +mkdir -p -- "$mntdir" + +mountpoint -q "$mntdir" || + mount -t tmpfs tmpfs "$mntdir" ||: + +pipenum=0 +pipe="$PIPELINE" +datadir= +destdir= + +while [ -n "$pipe" ]; do + name="${pipe%%,*}" + exe="$handlerdir/$name" + + if [ -x "$exe" ]; then + eval "callnum=\"\${callnum_$name:-0}\"" + + datadir="$mntdir/src/pipe$pipenum" + destdir="$mntdir/dst/pipe$pipenum" + + [ "$pipenum" != 0 ] || + prevdir="" + + mkdir -p -- "$datadir" "$destdir" + + if ! mountpoint -q "$destdir"; then + message "[$callnum] Handler: $exe" + + export name callnum datadir destdir prevdir + + rc=0 + "$exe" || rc=$? + + if [ "$rc" != 0 ]; then + [ "$rc" != 2 ] || + break + message "[$callnum] Handler failed (rc=$rc)" + sleep 1 + continue + fi + else + message "[$callnum] Handler: $exe skipped" + fi + + prevdir="$destdir" + + callnum=$(($callnum + 1)) + eval "callnum_$name=\"\$callnum\"" + fi + + pipe="${pipe#$name}" + pipe="${pipe#,}" + + pipenum=$(($pipenum + 1)) +done -- 2.21.0