thực tế là gì
Tôi có một máy chủ (EX42) và một hộp lưu trữ (BX21) đều được lưu trữ tại Hetzner. Trên máy chủ chạy phiên bản ngang hàng và tôi muốn lưu dữ liệu trên hộp lưu trữ.
tôi đã cài đặt sshfs
trên máy chủ gốc Debian 10 của tôi và gắn hộp lưu trữ:
/etc/fstab
:
<user>@<user>.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,reconnect,_netdev 0 0
Tôi đã gắn hệ thống tập tin với các tùy chọn sau liên quan đến liên kết tượng trưng:
-o vô hiệu hóa_hardlink
link(2) sẽ trở lại với errno được đặt thành ENOSYS. liên kết cứng
hiện không hoạt động hoàn hảo trên sshfs và điều này gây nhầm lẫn
một số chương trình. Nếu điều đó xảy ra, hãy thử vô hiệu hóa các liên kết cứng
với tùy chọn này.
-o biến đổi_symlink
chuyển đổi các liên kết tượng trưng tuyệt đối thành tương đối
Sau đó, tôi khởi động Peertube bên trong docker và gắn thư mục vào vùng chứa này
đồng đẳng:
khối lượng:
- nội dung:/ứng dụng/khách hàng/dist
- /peertube/data/peertube:/data
- /peertube/data/config:/config
mạng:
- mặc định
Vấn đề
Tôi chạy một phiên bản ngang hàng với docker và cố gắng cài đặt một plugin bằng lệnh này:
$: NODE_ENV=sản xuất NODE_CONFIG_DIR=/cấu hình plugin sợi: cài đặt -n chương trình bổ trợ ngang hàng
Đầu ra cho thấy có lỗi khi tạo liên kết tượng trưng
chạy sợi v1.22.17
...
29-03-2022 09:35:16.286 lỗi: Không thể cài đặt plugin peertube-plugin-chương, hãy xóa nó... {
"lỗi": {
"lỗi": {
"stack": "Lỗi: Lệnh không thành công: yarn add [email protected]\nwarning pack.json: Không có trường giấy phép\nwarning Không có trường giấy phép\nlỗi Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o , liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n\n tại ChildProcess .exithandler (node:child_ process:399:12)\n tại ChildProcess.emit (node:events:526:28)\n tại ChildProcess.emit (node:domain:475:12)\n tại MaybeClose (node:internal/ child_ process:1092:16)\n tại Process.ChildProcess._handle.onexit (nút:internal/child_ process:302:5)",
"message": "Lệnh không thành công: yarn add [email protected]\nwarning package.json: No license field\nwarning No license field\nerror Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n",
"bị giết": sai,
"mã": 1,
"tín hiệu": không,
"cmd": "sợi thêm [email protected]"
},
"stdout": "[1/4] Đang giải quyết gói...\n[2/4] Đang tìm nạp gói...\n[3/4] Liên kết phụ thuộc...\ninfo Nếu bạn cho rằng đây là lỗi, vui lòng mở báo cáo lỗi với thông tin được cung cấp trong \"/data/plugins/yarn-error.log\".\ninfo Truy cập https://yarnpkg.com/en/docs/cli/add để biết tài liệu về lệnh này.\n ",
"stderr": "gói cảnh báo.json: Không có trường giấy phép\ncảnh báo Không có trường giấy phép\nlỗi Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked ' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n"
}
}
...
{
err: Lỗi: Lệnh không thành công: yarn add [email protected]
gói cảnh báo.json: Không có trường giấy phép
cảnh báo Không có trường giấy phép
lỗi Đã xảy ra lỗi không mong muốn: "EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/. thùng/được đánh dấu'".
tại ChildProcess.exithandler (nút:child_ process:399:12)
tại ChildProcess.emit (nút:sự kiện:526:28)
tại ChildProcess.emit (nút:miền:475:12)
tại có thểĐóng (nút:internal/child_ process:1092:16)
tại Process.ChildProcess._handle.onexit (node:internal/child_ process:302:5) {
bị giết: sai,
mã số: 1,
tín hiệu: không,
cmd: 'sợi thêm [email protected]'
},
thiết bị xuất chuẩn: '[1/4] Đang giải quyết các gói...\n' +
'[2/4] Đang tìm nạp gói...\n' +
'[3/4] Liên kết phụ thuộc...\n' +
'thông tin Nếu bạn cho rằng đây là lỗi, vui lòng mở báo cáo lỗi với thông tin được cung cấp trong "/data/plugins/yarn-error.log".\n' +
'thông tin Truy cập https://yarnpkg.com/en/docs/cli/add để biết tài liệu về lệnh này.\n',
thiết bị lỗi chuẩn: 'gói cảnh báo.json: Không có trường giấy phép\n' +
'cảnh báo Không có trường giấy phép\n' +
` error Đã xảy ra lỗi không mong muốn: "EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/ .bin/đã đánh dấu'".\n`
}
lỗi Lệnh không thành công với mã thoát 255.
Nhưng khi tôi nhìn vào bên trong thư mục đó, tôi có thể thấy liên kết tượng trưng đã được tạo và hoạt động
$: ls -la /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/
tổng số 12
drwxr-xr-x 1 peertube peertube 3 ngày 29 tháng 3 09:35 .
drwxr-xr-x 1 peertube peertube 3 Ngày 29 tháng 3 09:35 ..
lrwxr-xr-x 1 peertube peertube 26 ngày 29 tháng 3 09:35 được đánh dấu -> ../../../marked/bin/marked
$: mèo /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked
#!/usr/bin/env nút
/**
* Đánh dấu CLI
* Bản quyền (c) 2011-2013, Christopher Jeffrey (Giấy phép MIT)
*/
const fs = yêu cầu('fs'),
đường dẫn = yêu cầu ('đường dẫn'),
đánh dấu = yêu cầu('../');
/**
* Trang người đàn ông
*/
chức năng trợ giúp() {
const spawn = require('child_ process').spawn;
tùy chọn const = {
cwd: process.cwd(),
env: process.env,
....
Vì vậy, tôi đã tự mình thử nó bên trong vùng chứa bằng cách tạo một tệp, liên kết tượng trưng và sửa đổi nó
$: tiếng vang "Xin chào" > /data/plugins/hello
$: mèo/dữ liệu/plugin/xin chào
Xin chào
----
$: ln -s /data/plugins/hello /data/plugins/hello_link
ln: không thể tạo liên kết tượng trưng '/data/plugins/hello_link': Lỗi đầu vào/đầu ra
----
$: mèo/dữ liệu/plugin/hello_link
Xin chào
----
$: tiếng vang "Thế giới" >> /data/plugins/hello_link
----
$: mèo/dữ liệu/plugin/xin chào
Xin chào
Thế giới
----
$: ls -la/dữ liệu/plugin/
tổng cộng 40
drwxr-xr-x 1 peertube peertube 10 ngày 29 tháng 3 09:38 .
drwxr-xr-x 1 đồng đẳng đồng đẳng 16 ngày 29 tháng 3 06:32 ..
drwxr-xr-x 1 peertube peertube 2 ngày 28 tháng 3 16:48 .DAV
drwxr-xr-x 1 peertube peertube 3 ngày 28 tháng 3 16:48 dữ liệu
-rw-r--r-- 1 peertube peertube 12 Mar 29 09:38 xin chào
lrwxr-xr-x 1 peertube peertube 5 ngày 29 tháng 3 09:38 hello_link -> xin chào
drwxr-xr-x 1 peertube peertube 6 ngày 29 tháng 3 06:35 node_modules
-rw-r--r-- 1 peertube peertube 76 ngày 28 tháng 3 16:48 pack.json
-rw-r--r-- 1 peertube peertube 1248 ngày 29 tháng 3 09:35 yarn-error.log
-rw-r--r-- 1 peertube peertube 413 ngày 28 tháng 3 16:48 yarn.lock
Các ln -s
lệnh đưa ra một lỗi, nhưng nếu không thì mọi thứ sẽ ổn và hoạt động như mong đợi.
Những gì tôi đã cố gắng
Tôi cũng đã thử gắn bộ lưu trữ với tùy chọn này
-o follow_symlinks
theo liên kết tượng trưng trên máy chủ
nhưng tất cả những gì làm là phá vỡ các tệp và tôi không thể xóa chúng nữa, khi tệp mục tiêu liên kết không còn tồn tại nữa. Vì vậy, tôi đã loại bỏ tùy chọn này một lần nữa.
Tôi đã hỏi bộ phận hỗ trợ khách hàng nếu symlink được hỗ trợ và câu trả lời là "có, nó được hỗ trợ".
Khi tôi tạo trực tiếp các liên kết tượng trưng trên máy chủ, nó hoạt động mà không gặp vấn đề gì.
Tôi đã cố gắn thư mục bên trong vùng chứa vào cùng thư mục với trên máy chủ
/etc/fstab
:
<user>@<user>.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,reconnect,_netdev 0 0
đồng đẳng:
khối lượng:
- nội dung:/ứng dụng/khách hàng/dist
- /var/peertube/data:/var/peertube/data
- /peertube/data/config:/config
mạng:
- mặc định
nhưng điều này đã không giúp đỡ.
Câu hỏi
Đối với tôi, có vẻ như ngay khi tôi gắn sshf vào bên trong bộ chứa docker, nó không thể tạo bất kỳ liên kết tượng trưng nào mà không có thông báo lỗi này.
Tôi cần làm gì để nó hoạt động bên trong docker?