Score:0

ระบบไฟล์ที่ติดตั้งด้วย sshfs จะส่งข้อผิดพลาดภายในนักเทียบท่าเมื่อสร้าง symlink

ธง us

สิ่งที่เป็นจริง

ฉันมีเซิร์ฟเวอร์ (EX42) และกล่องเก็บข้อมูล (BX21) ทั้งคู่โฮสต์ที่ Hetzner บนเซิร์ฟเวอร์เรียกใช้อินสแตนซ์ peertube และฉันต้องการบันทึกข้อมูลในกล่องเก็บข้อมูล ฉันติดตั้ง sshfs บนเซิร์ฟเวอร์รูท Debian 10 ของฉันและติดตั้งกล่องเก็บข้อมูล: /etc/fstab:

<ผู้ใช้>@<ผู้ใช้>.your-storagebox.de:/data /peertube/data fuse.sshfs ssh_command=sshpass\040-f\040/peertube/sftp.pass\040ssh,uid=999,gid=999,allow_other ,disable_hardlink,transform_symlinks,เชื่อมต่อใหม่,_netdev 0 0

ฉันติดตั้งระบบไฟล์ด้วยตัวเลือกต่อไปนี้เกี่ยวกับ symlink:

-o enable_hardlink
              ลิงก์ (2) จะกลับมาพร้อม errno ที่ตั้งค่าเป็น ENOSYS ฮาร์ดลิงก์
              ขณะนี้ใช้งาน sshfs ได้ไม่สมบูรณ์และทำให้เกิดความสับสน
              บางโปรแกรม หากเป็นเช่นนั้น ให้ลองปิดการใช้งานฮาร์ดลิงก์
              ด้วยตัวเลือกนี้

-o converter_symlinks
              เปลี่ยน symlink แบบสัมบูรณ์ให้เป็นแบบสัมพัทธ์

จากนั้นฉันเริ่ม Peertube ภายในนักเทียบท่าและติดตั้งโฟลเดอร์ลงในคอนเทนเนอร์นี้

 เพียร์ทูบ:
    ปริมาณ:
    - สินทรัพย์:/app/client/dist
    - /peertube/data/peertube:/ข้อมูล
    - /peertube/data/config:/config
    เครือข่าย:
    - ค่าเริ่มต้น

ปัญหา

ฉันเรียกใช้อินสแตนซ์ peertube ด้วยนักเทียบท่าและพยายามติดตั้งปลั๊กอินด้วยคำสั่งนี้:
$: NODE_ENV=การผลิต NODE_CONFIG_DIR=/config ปลั๊กอินเส้นด้าย:ติดตั้ง -n peertube-plugin-บท
ผลลัพธ์แสดงว่ามีข้อผิดพลาดในการสร้าง symlink

รันเส้นด้าย v1.22.17
...
29-2022-03 09:35:16.286 ข้อผิดพลาด: ไม่สามารถติดตั้งปลั๊กอิน peertube-plugin-chapters ได้ ลบออก... {
  "ผิดพลาด": {
    "ผิดพลาด": {
      "stack": "ข้อผิดพลาด: คำสั่งล้มเหลว: เส้นด้ายเพิ่ม [email protected]\nคำเตือน package.json: ไม่มีฟิลด์ใบอนุญาต\nคำเตือนไม่มีฟิลด์ใบอนุญาต\nข้อผิดพลาด เกิดข้อผิดพลาดที่ไม่คาดคิด: \"EIO: ข้อผิดพลาด i/o , symlink '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n\n ที่ ChildProcess .exithandler (node:child_process:399:12)\n ที่ ChildProcess.emit (node:events:526:28)\n ที่ ChildProcess.emit (node:domain:475:12)\n ที่ mayClose (node:internal/ child_process:1092:16)\n ที่ Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)",
      "ข้อความ": "คำสั่งล้มเหลว: เส้นด้ายเพิ่ม [email protected]\nคำเตือน package.json: ไม่มีช่องใบอนุญาต\nคำเตือนไม่มีช่องใบอนุญาต\nข้อผิดพลาด เกิดข้อผิดพลาดที่ไม่คาดคิด: \"EIO: ข้อผิดพลาด i/o, symlink '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n",
      "ถูกฆ่า": เท็จ
      "รหัส": 1,
      "สัญญาณ": โมฆะ
      "cmd": "เส้นด้ายเพิ่ม [email protected]"
    },
    "stdout": "[1/4] กำลังแก้ไขแพ็คเกจ...\n[2/4] กำลังดึงข้อมูลแพ็คเกจ...\n[3/4] กำลังเชื่อมโยงการอ้างอิง...\nข้อมูล หากคุณคิดว่านี่เป็นข้อผิดพลาด โปรด เปิดรายงานข้อบกพร่องด้วยข้อมูลที่ระบุใน \"/data/plugins/yarn-error.log\"\ninfo ไปที่ https://yarnpkg.com/en/docs/cli/add เพื่อดูเอกสารประกอบเกี่ยวกับคำสั่งนี้\n ",
    "stderr": "คำเตือน package.json: ไม่มีฟิลด์ใบอนุญาต\nคำเตือนไม่มีฟิลด์ใบอนุญาต\nข้อผิดพลาด เกิดข้อผิดพลาดที่ไม่คาดคิด: \"EIO: ข้อผิดพลาด i/o, symlink '../../../marked/bin/marked ' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n"
  }
}
...
{
  ข้อผิดพลาด: ข้อผิดพลาด: คำสั่งล้มเหลว: เส้นด้ายเพิ่ม [email protected]
  คำเตือน package.json: ไม่มีฟิลด์ใบอนุญาต
  คำเตือนไม่มีฟิลด์ใบอนุญาต
  error เกิดข้อผิดพลาดที่ไม่คาดคิด: "EIO: i/o error, symlink '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/ ถังขยะ / ทำเครื่องหมาย '"
  
      ที่ ChildProcess.exithandler (โหนด:child_process:399:12)
      ที่ ChildProcess.emit (โหนด:เหตุการณ์:526:28)
      ที่ ChildProcess.emit (โหนด:โดเมน:475:12)
      ที่ mayClose (โหนด:ภายใน/child_process:1092:16)
      ที่ Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) {
    ฆ่า: เท็จ
    รหัส: 1,
    สัญญาณ: โมฆะ,
    cmd: 'yarn เพิ่ม [email protected]'
  },
  stdout: '[1/4] กำลังแก้ไขแพ็คเกจ...\n' +
    '[2/4] กำลังเรียกแพ็คเกจ...\n' +
    '[3/4] กำลังเชื่อมโยงการอ้างอิง...\n' +
    'ข้อมูล หากคุณคิดว่านี่คือข้อผิดพลาด โปรดเปิดรายงานข้อบกพร่องด้วยข้อมูลที่ระบุใน "/data/plugins/yarn-error.log"\n' +
    'ข้อมูล ไปที่ https://yarnpkg.com/en/docs/cli/add เพื่อดูเอกสารเกี่ยวกับคำสั่งนี้\n',
  stderr: 'warning package.json: ไม่มีฟิลด์ใบอนุญาต\n' +
    'คำเตือนไม่มีฟิลด์ใบอนุญาต\n' +
    `error เกิดข้อผิดพลาดที่ไม่คาดคิด: "EIO: i/o error, symlink '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/ .bin/marked'".\n`
}
ข้อผิดพลาด คำสั่งล้มเหลวด้วยรหัสออก 255

แต่เมื่อฉันดูในโฟลเดอร์นั้น ฉันเห็นได้ว่ามีการสร้าง symlink และใช้งานได้

$: ls -la /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/
รวม 12
drwxr-xr-x 1 เพียร์ทิวบ์ เพียร์ทูบ 3 มี.ค. 29 09:35 น.
drwxr-xr-x 1 เพียร์ทิวบ์ เพียร์ทูบ 3 มี.ค. 29 09:35 น. ..
lrwxr-xr-x 1 peertube peertube 26 มี.ค. 29 09:35 ทำเครื่องหมาย -> ../../../marked/bin/marked

$: cat /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked  
#!/usr/bin/env โหนด

/**
 * ทำเครื่องหมาย CLI
 * ลิขสิทธิ์ (c) 2011-2013, Christopher Jeffrey (ใบอนุญาต MIT)
 */

const fs = ต้องการ ('fs'),
  เส้นทาง = ต้องการ ('เส้นทาง'),
  ทำเครื่องหมาย = ต้องการ ('../');

/**
 * หน้าคน
 */

ช่วยฟังก์ชั่น () {
  วางไข่ const = ต้องการ ('child_process').spawn;

  ตัวเลือก const = {
    cwd: process.cwd(),
    env: process.env,
....

ดังนั้นฉันจึงลองด้วยตัวเองภายในคอนเทนเนอร์ด้วยการสร้างไฟล์ เชื่อมโยงและแก้ไข

$: echo "สวัสดี" > /data/plugins/hello 
$: cat /data/plugins/สวัสดี 
สวัสดี

----

$: ln -s /data/plugins/hello /data/plugins/hello_link
ln: ล้มเหลวในการสร้างลิงก์สัญลักษณ์ '/data/plugins/hello_link': ข้อผิดพลาดอินพุต/เอาต์พุต

----

$: cat /data/plugins/hello_link 
สวัสดี

----

$: echo "โลก" >> /data/plugins/hello_link 

----

$: cat /data/plugins/สวัสดี
สวัสดี
โลก

----

$: ls -la /data/plugins/
รวม 40
drwxr-xr-x 1 เพียร์ทิวบ์ เพียร์ทิวบ์ 10 มี.ค. 29 09:38 น.
drwxr-xr-x 1 ช่อง peertube 16 มี.ค. 29 06:32 น. ..
drwxr-xr-x 1 peertube peertube 2 มี.ค. 28 16:48 น. DAV
drwxr-xr-x 1 peertube peertube 3 มี.ค. 28 16:48 ข้อมูล
-rw-r--r-- 1 peertube peertube 12 มี.ค. 29 09:38 น. สวัสดี
lrwxr-xr-x 1 peertube peertube 5 มี.ค. 29 09:38 น. hello_link -> สวัสดี
drwxr-xr-x 1 peertube peertube 6 มี.ค. 29 06:35 น. node_modules
-rw-r--r-- 1 peertube peertube 76 28 มี.ค. 16:48 น. package.json
-rw-r--r-- 1 เพียร์ทูบ เพียร์ทูบ 1248 29 มี.ค. 09:35 น. yarn-error.log
-rw-r--r-- 1 เพียร์ทูบ เพียร์ทูบ 413 28 มี.ค. 16:48 น.

เดอะ ลน - ส คำสั่งส่งข้อผิดพลาด แต่อย่างอื่นทุกอย่างดูดีและทำงานตามที่คาดไว้

สิ่งที่ฉันพยายาม

ฉันพยายามติดตั้งที่เก็บข้อมูลด้วยตัวเลือกนี้ด้วย

-o follow_symlinks
    ติดตาม symlinks บนเซิร์ฟเวอร์ 

แต่สิ่งที่ทำคือทำลายไฟล์ และฉันไม่สามารถลบได้อีกต่อไป เมื่อไม่มีไฟล์เป้าหมายของลิงก์อีกต่อไป ดังนั้นฉันจึงลบตัวเลือกนี้อีกครั้ง

ฉันถามฝ่ายบริการลูกค้าว่ารองรับ symlink หรือไม่ และคำตอบคือ "ใช่ รองรับ"

เมื่อฉันสร้าง symlink บนเซิร์ฟเวอร์โดยตรง มันใช้งานได้โดยไม่มีปัญหา

ฉันพยายามเมานต์โฟลเดอร์ภายในคอนเทนเนอร์ที่โฟลเดอร์เดียวกับบนเซิร์ฟเวอร์
/etc/fstab:

<ผู้ใช้>@<ผู้ใช้>.your-storagebox.de:/data /var/peertube/data fuse.sshfs ssh_command=sshpass\040-f\040/peertube/sftp.pass\040ssh,uid=999,gid=999 ,allow_other,disable_hardlink,transform_symlinks,เชื่อมต่อใหม่,_netdev 0 0
 เพียร์ทูบ:
    ปริมาณ:
    - สินทรัพย์:/app/client/dist
    - /var/peertube/data:/var/peertube/data
    - /peertube/data/config:/config
    เครือข่าย:
    - ค่าเริ่มต้น

แต่สิ่งนี้ไม่ได้ช่วยอะไร

คำถาม

สำหรับฉันแล้ว ทันทีที่ฉันเมานต์ sshfs ภายในคอนเทนเนอร์นักเทียบท่า มันไม่สามารถสร้าง symlink ใดๆ ได้หากไม่มีข้อความแสดงข้อผิดพลาดนี้

ฉันต้องทำอย่างไรเพื่อให้มันทำงานภายในนักเทียบท่า

โพสต์คำตอบ

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