Score:1

กำลังแสดงข้อความถึงผู้ใช้ระหว่างการติดตั้ง Debian แบบไม่ต้องใส่ข้อมูลล่วงหน้า

ธง tr

ในช่วง late_command ขั้นตอนของการติดตั้งแบบอัตโนมัติ ฉันใช้เชลล์สคริปต์:

d-i preseed/late_command สตริงในเป้าหมาย /bin/sh -c './execute-script.sh'

เมื่อถึงขั้นตอน late_command UI (พื้นหลังสีน้ำเงิน หน้าต่างสีเทา) จะแสดงข้อความ "กำลังรัน preseed..." :

ป้อนคำอธิบายรูปภาพที่นี่

ฉันสงสัยว่ามีวิธีใดในการแสดงข้อความอื่นๆ ที่มีชีวิตชีวาตามสิ่งที่ ดำเนินการ-script.sh กำลังทำ.

ฉันคิดอย่างไร้เดียงสาว่าการใช้ STDOUT ปกติกับเสียงสะท้อนจะทำเคล็ดลับได้ แต่ดูเหมือนว่าจะซับซ้อนกว่า

การค้นหาของฉันจนถึงตอนนี้ทำให้ฉันสนใจถึงความเป็นไปได้ในการใช้งาน ดีเบตคอนเฟอเรนซ์ แต่ฉันไม่สามารถหาวิธีใด ๆ

สคริปต์เวอร์ชันปัจจุบันของฉันเปลี่ยนรูปตามคำตอบของ @Andrew :

#!/bin/sh

. /usr/share/debconf/confmodule
. "./variables.sh"

logFile="/target${INSTALLATION_LOG_LOCATION}"
templatePath="/target/tmp/deployment_progress_tracker.templates"

แมว > "${ templatePath}" << 'EOF'
แม่แบบ: deployment_progress_tracker/progress/fallback
ประเภท: ข้อความ
คำอธิบาย: ${STEP}...
อฟ

debconf-loadtemplate deployment_progress_tracker "${templatePath}"
db_progress START 0 1 deployment_progress_tracker/progress

บันทึกการเฝ้าดู () {
  การปรับใช้เสร็จสิ้น = เท็จ
  ในขณะที่ ! $deployment เสร็จสิ้น
  ทำ
    ถ้า [ -f "${logFile}" ]; แล้ว
      step=$(grep -E -o -a -h "Progress-step: .*" "${logFile}" | tail -1 | sed 's/Progress-step: //')
      ถ้า [ -z "${step##*$DEPLOYMENT_FINISHED*}" ]; แล้ว
        การปรับใช้เสร็จสิ้น=จริง
      elif [ -n "${ขั้นตอน}" ]; แล้ว
        db_subst deployment_progress_tracker/progress/fallback ขั้นตอน "${step}"
        db_progress INFO การปรับใช้_progress_tracker/progress/fallback
      ไฟ
    ไฟ
    นอน 3
  เสร็จแล้ว
}



(
  บันทึกการเฝ้าดู;
  rm -f "${ templatePath}";
  db_progress ชุดที่ 1;
  นอน 1;
  db_progress หยุด;
  db_unregister deployment_progress_tracker/progress;
) &

สคริปต์ก่อนหน้าจะส่งผลต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

และนำกลับไปที่เมนูตัวติดตั้ง (การเลือกเสร็จสิ้น การติดตั้งจะรันอีกครั้งในส่วนที่ตั้งไว้ล่วงหน้าและล้มเหลว การเลือก Abort จะไม่ยกเลิกการต่อเชื่อม ISO และรีบูต อย่างไรก็ตาม ฉันพยายามให้ทั้งการถอนการติดตั้งและการรีบูตทำโดยอัตโนมัติ):

ป้อนคำอธิบายรูปภาพที่นี่

Score:2
ธง es

คุณจะถูกจำกัดโดย ดีเบตคอนเฟอเรนซ์ และอาจไม่คุ้มค่ากับความพยายาม ฉันไม่คิดว่าคุณจะสามารถทำได้เลยด้วยการรันสคริปต์ เข้าเป้า. ฉันประสบความสำเร็จในการใช้ส่วนย่อยและสคริปต์ที่กำหนดไว้ล่วงหน้าต่อไปนี้กับ Debian Buster มันเปลี่ยนข้อความโดยที่ วิ่งปรี๊ด... จะแสดงสามครั้ง มันจะแสดง

  1. ขั้นตอนที่ ก
  2. ขั้นตอนที่ B
  3. วิ่งค... (ตัวเลือก "สำรอง")

ไฟล์ preseed บางส่วนเพื่อดาวน์โหลดและเรียกใช้สคริปต์

d-i preseed/late_command สตริง \
  wget -P /run http://REDACTED/my_script.sh ; \
  chmod 755 /run/my_script.sh ; \
  /run/my_script.sh

เนื้อหาของ my_script.sh.

#!/bin/sh

. /usr/share/debconf/confmodule

ตั้ง -e

# สร้างไฟล์เทมเพลตพร้อมสตริงสำหรับ debconf ที่จะแสดง
แมว > /run/my_script.templates << 'EOF'
แม่แบบ: my_script/progress/a
ประเภท: ข้อความ
Description: ขั้นตอนที่ ก

แม่แบบ: my_script/progress/b
ประเภท: ข้อความ
คำอธิบาย : ขั้นตอนที่ B

แม่แบบ: my_script/progress/fallback
ประเภท: ข้อความ
คำอธิบาย: กำลังเรียกใช้ ${STEP}...
อฟ

# ใช้ยูทิลิตี้เพื่อโหลดไฟล์เทมเพลตที่สร้างขึ้น
debconf-load template my_script /run/my_script.templates

# หยุดชั่วคราวเพื่อแสดง "กำลังรัน Preseed..."
นอน2

# foreach 3 ขั้นตอนบอก debconf ว่าจะแสดงสตริงเทมเพลตใด
สำหรับขั้นตอนใน bc; ทำ

    ถ้า ! db_progress ข้อมูล my_script/progress/$step; แล้ว
        db_subst my_script/progress/fallback ขั้นตอน "$ขั้นตอน"
        db_progress ข้อมูล my_script/progress/fallback
    ไฟ

    กรณี $ ก้าวเข้ามา
        "ก")
            # เรียกใช้คำสั่งหรือสคริปต์ในสภาพแวดล้อมของตัวติดตั้ง (ซึ่งใช้คำสั่ง sleep ในสภาพแวดล้อมของตัวติดตั้ง)
            นอน10
            ;;
        "ข")
            # รันคำสั่งหรือสคริปต์ในสภาพแวดล้อม chroot (ใช้คำสั่ง sleep จากระบบที่ติดตั้ง)
            การนอนหลับในเป้าหมาย 10
            ;;
        "ค")
            #อีกตัวอย่างขั้นตอน
            นอน10
            ;;
    เอสแซค
เสร็จแล้ว

สคริปต์และไฟล์เทมเพลตที่สร้างขึ้นขึ้นอยู่กับ เสร็จสิ้นการติดตั้ง (ตัวติดตั้งเดเบียน บรรจุุภัณฑ์) สคริปต์ และ แม่แบบ.

Bil5 avatar
tr flag
ขอบคุณสำหรับความคิดที่ดี เหตุใดสิ่งต่อไปนี้จึงไม่ทำงาน `d-i preseed/late_command สตริง /bin/sh logs-observer.sh &; ในเป้าหมาย --pass-stdout /bin/sh -c './my-target-script.sh > outputlog'` - `myscript.sh` จะสะท้อนขั้นตอนต่าง ๆ a, b, c... พวกเขาจะถูกบันทึกไว้ใน `outputlog` - `logs-observer.sh` จะทำงานวนซ้ำไม่สิ้นสุด (จนกว่าเขาจะอ่านว่า "เสร็จสิ้น") และอ่านขั้นตอนสุดท้ายที่เขียนไว้ใน `outputlog` "ที่ใช้ร่วมกัน" และอัปเดตข้อความตามนั้น แน่นอน ขั้นตอนจะถูกกำหนดไว้ล่วงหน้าใน `logs-observer.sh` เช่นเดียวกับที่คุณทำในไฟล์ `my-script.sh` ของคุณ
Andrew Lowther avatar
es flag
@Bil5 ที่อาจใช้งานได้ แต่ฟังดูซับซ้อนมาก ฉันจะมีสคริปต์ `logs-observer.sh` เรียก `in-target ./my-target-script.sh` อยู่ข้างใน `in-target' เป็นเพียงสคริปต์ในสภาพแวดล้อมของตัวติดตั้งที่ล้อมคำสั่งภายในการตั้งค่า chroot บางอย่าง สามารถเรียกได้จากสคริปต์ของคุณและไม่ต้องเรียกไดเร็กทอรีจาก `late_command`
Bil5 avatar
tr flag
คำแนะนำของคุณทำงานได้อย่างไร้ที่ติ ขอบคุณมาก อย่างไรก็ตาม ทำตามที่คุณพูด (`in-target ./my-target-script.sh` และจากนั้นเรียก `/bin/sh logs-observer.sh`) ฉันไม่สามารถ เพื่อให้คำสั่ง `db_progress INFO` ทำงานได้เมื่อเรียกใช้โดยตรงจาก `logs-observer.sh` (แน่นอนว่ามีที่มาจาก `confmodule` และสร้างเทมเพลตไว้ล่วงหน้า) วิธีเดียวที่ฉันพบคือทำโดยตรงจาก `my-target-script.sh` ดังนั้นสคริปต์ทั้งสองจึงต้องสื่อสารกันและไฟล์บันทึกเป็นวิธีเดียวที่ฉันพบ ความคิดใด ๆ
Andrew Lowther avatar
es flag
ฉันเดาว่าขึ้นอยู่กับว่าคุณต้องการให้การอัปเดต UI มีความเฉพาะเจาะจงเพียงใด ฉันได้เพิ่มสคริปต์ตัวอย่างเพื่อแสดงวิธีการอัปเดต UI แล้วเรียกใช้คำสั่งหรือสคริปต์ ซึ่งรวมถึงความสามารถในการเรียกใช้คำสั่งหรือสคริปต์ "ในเป้าหมาย" UI สามารถอัปเดตได้อีกครั้งหลังจากคำสั่งหรือสคริปต์เสร็จสิ้นเท่านั้น
Bil5 avatar
tr flag
ฉันสามารถยืนยันได้ว่าวิธีนี้ใช้ได้ดี และฉันพบวิธีเรียกทุกคำสั่ง debconf จากสคริปต์ตัวติดตั้ง ตอนนี้ฉันกำลังเผชิญกับปัญหาที่ยากอีกประการหนึ่ง หลังจากที่ฉันใช้สคริปต์เสร็จแล้ว แทนที่จะออกจากโปรแกรมติดตั้งโดยอัตโนมัติ นำซีดีรอมออกและรีบูตเครื่อง (ตามการกำหนดค่าใน preseed และทดสอบสำเร็จก่อน debconf) มันจะกลับไปที่โปรแกรมติดตั้ง เมนูและไม่อนุญาตให้รีบูตโดยไม่ต้องเปิดการติดตั้งใหม่ ฉันสังเกตเห็นข้อความนี้ใน syslog: `รายการเมนู 'เสร็จสิ้นการติดตั้ง' สำเร็จ แต่ขอให้ปล่อยไว้เป็น Unconfigured'
Bil5 avatar
tr flag
ฉันได้เพิ่มเวอร์ชันปัจจุบันของสคริปต์ที่ฉันกำลังทดลองใช้ในความคิดเห็นแรกของฉัน เพื่อให้เราสามารถพูดคุยกันได้
Bil5 avatar
tr flag
หลังจากการไตร่ตรองแล้ว อาจอยู่นอกเหนือขอบเขตของคำถามเริ่มต้นของฉัน ฉันต้องการที่นี่เพื่อดูข้อความบางอย่างในตัวติดตั้ง และขอบคุณสำหรับคำตอบของคุณที่ใช้งานได้ ฟังดูสะอาดกว่าถ้าสร้างเรื่องใหม่สำหรับข้อกังวลใหม่ของฉัน ขอขอบคุณอีกครั้ง. https://serverfault.com/questions/1074794/debian-installer-wont-exit-after-preseeded-installation

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา