สิ่งที่เป็นจริง
ฉันมีเซิร์ฟเวอร์ (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 ใดๆ ได้หากไม่มีข้อความแสดงข้อผิดพลาดนี้
ฉันต้องทำอย่างไรเพื่อให้มันทำงานภายในนักเทียบท่า