FHS 的全稱為「Filesystem Hierarchy Standard」,直譯為「文件系統層次結構標準」。
以下為官方站點:
目前 V2Ray 官方腳本的安裝路徑完全不符合 FHS,以下為當前的安裝路徑:
嚴格來講,這並不利於服務器系統的管理,因為非包管理系統安裝的軟體應當放置於 /usr/local 下,依據「4.9. /usr/local : Local hierarchy」,則路徑為:
並且,修改路徑也必定要修改啟動服務文件。
這裡有一個參考項目:
https://github.com/v2fly/fhs-install-v2ray
在此,請各位對其加以審查,確定無誤後,將著手對官方腳本的修改。
對官方腳本的修改並不會影響到各類一鍵腳本,卻會影響到一些相關教程,對此,我認為,教程可以修改,但是,使用規範的安裝路徑,比使用不規範的安裝路徑要好很多。
參考項目已基本可用。
考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。
依據 #1011、#2361 和 #2322。
參考項目中,啟動服務文件的內容確定為:
v2ray.service
---
[Unit]
Description=V2Ray Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/
[Install]
WantedBy=multi-user.target
[email protected]
---
[Unit]
Description=V2Ray Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/%i.json
[Install]
WantedBy=multi-user.target
對於日誌權限問題的解決方案是:
# Used to store V2Ray log files
if [[ ! -d '/var/log/v2ray/' ]]; then
if [[ -n "$(id nobody | grep nogroup)" ]]; then
install -d -o nobody -g nogroup /var/log/v2ray/
else
install -do nobody /var/log/v2ray/
fi
fi
如果分目录的话目前测试可以兼容运行吗
如果分目录的话目前测试可以兼容运行吗
若啟動服務文件已存在,該腳本不會對其進行修改。
在完全使用新的啟動服務文件的情況下:
對於 v4.23.0 及以上版本,v2ray.service 和 [email protected] 皆可使用;
對於 v4.23.0 以下版本,僅可使用 [email protected]。
上述情況已完成測試。
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2ray 和 v2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进/usr/local/lib/v2ray,然后把v2ray和v2ctl软链接到/usr/local/bin里,这样可以扔掉Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/至于 systemd 的 service 文件我会处理的
感謝提供建議 :)
這個方法很不錯,我這就去進行修正。
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进/usr/local/lib/v2ray,然后把v2ray和v2ctl软链接到/usr/local/bin里,这样可以扔掉Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的感謝提供建議 :)
這個方法很不錯,我這就去進行修正。
大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进/usr/local/lib/v2ray,然后把v2ray和v2ctl软链接到/usr/local/bin里,这样可以扔掉Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的感謝提供建議 :)
這個方法很不錯,我這就去進行修正。
https://github.com/v2fly/fhs-install-v2ray/commit/dccc5039de563f2568300e2b4b60001f72cd5680
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进/usr/local/lib/v2ray,然后把v2ray和v2ctl软链接到/usr/local/bin里,这样可以扔掉Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的感謝提供建議 :)
這個方法很不錯,我這就去進行修正。大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置
配置的遷移交給使用者手動進行會不會更好一些呢?
其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进/usr/local/lib/v2ray,然后把v2ray和v2ctl软链接到/usr/local/bin里,这样可以扔掉Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的感謝提供建議 :)
這個方法很不錯,我這就去進行修正。大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置
配置的遷移交給使用者手動進行會不會更好一些呢?
或许可以作为可选并默认不启用选项,让用户自己选择
依據 #1011、#2361 和 #2322。
參考項目中,啟動服務文件的內容確定為:
v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target[email protected] --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/%i.json [Install] WantedBy=multi-user.target對於日誌權限問題的解決方案是:
# Used to store V2Ray log files if [[ ! -d '/var/log/v2ray/' ]]; then if [[ -n "$(id nobody | grep nogroup)" ]]; then install -d -o nobody -g nogroup /var/log/v2ray/ else install -do nobody /var/log/v2ray/ fi fi
推荐把 AmbientCapabilities=CAP_NET_BIND_SERVICE 换为 CapabilityBoundingSet= CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
我那个没加 CAP_NET_ADMIN 导致很多人的透明代理出现问题
考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。
鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择
依據 #1011、#2361 和 #2322。
參考項目中,啟動服務文件的內容確定為:v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target[email protected] --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/%i.json [Install] WantedBy=multi-user.target對於日誌權限問題的解決方案是:
# Used to store V2Ray log files if [[ ! -d '/var/log/v2ray/' ]]; then if [[ -n "$(id nobody | grep nogroup)" ]]; then install -d -o nobody -g nogroup /var/log/v2ray/ else install -do nobody /var/log/v2ray/ fi fi推荐把
AmbientCapabilities=CAP_NET_BIND_SERVICE换为CapabilityBoundingSet= CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
我那个没加 CAP_NET_ADMIN 导致很多人的透明代理出现问题
我這裡修改為如下內容進行測試:
v2ray.service
---
[Unit]
Description=V2Ray Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/
[Install]
WantedBy=multi-user.target
但低位端口卻開啟失敗了呢。
依據 #1011、#2361 和 #2322。
參考項目中,啟動服務文件的內容確定為:v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target[email protected] --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/%i.json [Install] WantedBy=multi-user.target對於日誌權限問題的解決方案是:
# Used to store V2Ray log files if [[ ! -d '/var/log/v2ray/' ]]; then if [[ -n "$(id nobody | grep nogroup)" ]]; then install -d -o nobody -g nogroup /var/log/v2ray/ else install -do nobody /var/log/v2ray/ fi fi推荐把
AmbientCapabilities=CAP_NET_BIND_SERVICE换为CapabilityBoundingSet= CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
我那个没加 CAP_NET_ADMIN 导致很多人的透明代理出现问题我這裡修改為如下內容進行測試:
v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target但低位端口卻開啟失敗了呢。
我似乎理解错了 CapabilityBoundingSet 的意思
考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择
這也正是我感到糾結的地方。
說句可能惹人生氣的話:「老東西,你早該被淘汰啦」。
或許需要有一個過渡期比較好?
考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择
這也正是我感到糾結的地方。
說句可能惹人生氣的話:「老東西,你早該被淘汰啦」。
或許需要有一個過渡期比較好?
其实我也认为 centos6 应该扔掉了
它实在旧的过分,早就不适合在生产环境使用了
依據 #1011、#2361 和 #2322。
參考項目中,啟動服務文件的內容確定為:v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target[email protected] --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody AmbientCapabilities=CAP_NET_BIND_SERVICE Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/ ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/%i.json [Install] WantedBy=multi-user.target對於日誌權限問題的解決方案是:
# Used to store V2Ray log files if [[ ! -d '/var/log/v2ray/' ]]; then if [[ -n "$(id nobody | grep nogroup)" ]]; then install -d -o nobody -g nogroup /var/log/v2ray/ else install -do nobody /var/log/v2ray/ fi fi推荐把
AmbientCapabilities=CAP_NET_BIND_SERVICE换为CapabilityBoundingSet= CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
我那个没加 CAP_NET_ADMIN 导致很多人的透明代理出现问题我這裡修改為如下內容進行測試:
v2ray.service --- [Unit] Description=V2Ray Service After=network-online.target Wants=network-online.target [Service] Type=simple User=nobody CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ [Install] WantedBy=multi-user.target但低位端口卻開啟失敗了呢。
我似乎理解错了 CapabilityBoundingSet 的意思
现在搞懂了,CapabilityBoundingSet 用于限制最多持有的 cap,AmbientCapabilities 用于在进程没有某个 cap 时增加 cap
因为在之前用的是 root,所以不需要使用 AmbientCapabilities,但是 nobody 是没有 CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW 的,因此需要加上 AmbientCapabilities 才正常
@unknowndev233 那應該是這樣麼?
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
@unknowndev233 那應該是這樣麼?
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
是的
其实我也认为 centos6 应该扔掉了
它实在旧的过分,早就不适合在生产环境使用了
附议
不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root
不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root
直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。
不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。
但是你我都不知道有多少人直接在 v2ray 直接用证书
不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。
但是你我都不知道有多少人直接在 v2ray 直接用证书
我參考了兩個模板項目的當前狀況。
vTemplate 需要 V2Ray 直接使用證書文件的有:
為 5/16。
v2ray-template 需要 V2Ray 直接使用證書文件的有:
為 4/19。
並且,有許多人是在使用各類第三方腳本進行部署。
我認為修改是值得的,可以先貼出信息,待一定時間後再進行修改。
不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。
但是你我都不知道有多少人直接在 v2ray 直接用证书
我參考了兩個模板項目的當前狀況。
vTemplate 需要 V2Ray 直接使用證書文件的有:
為 5/16。
v2ray-template 需要 V2Ray 直接使用證書文件的有:
為 4/19。
並且,有許多人是在使用各類第三方腳本進行部署。
我認為修改是值得的,可以先貼出信息,待一定時間後再進行修改。
那就这么做咯
@kslr 我能否在 v2ray/manual 和 v2fly/manual 中寫下相關信息,以保證使用者們有足夠的時間來提前瞭解相關修改呢?
文档中“下载安装”包含了这些信息,更新下就可以了。
首先,不个人不太赞成 nobody 代替 root
其次,systemctl 的用法与 service 是不一致的,应该是 systemctl start v2ray
首先,不个人不太赞成 nobody 代替 root
其次,systemctl的用法与service是不一致的,应该是systemctl start v2ray
多謝指正,稍後將去進行修改。
可以詳細說一下你不贊成使用 nobody 的原因麼?
首先,不个人不太赞成 nobody 代替 root
其次,systemctl的用法与service是不一致的,应该是systemctl start v2ray多謝指正,稍後將去進行修改。
可以詳細說一下你不贊成使用 nobody 的原因麼?
就像之前说的证书问题,还有就是我想不要对 service 文件做的更改太多了(万一有人改了回去呢
顺便 service 不要 After=network-online.target 又 Wants=network-online.target
有些奇葩情况下,因为 NetworkManager-wait-online 等的是 NetworkManager 导致等了没有意义的三十秒
After=network-online.target 就好,其实可以看看现存的 service 是什么
首先,不个人不太赞成 nobody 代替 root
其次,systemctl的用法与service是不一致的,应该是systemctl start v2ray多謝指正,稍後將去進行修改。
可以詳細說一下你不贊成使用 nobody 的原因麼?就像之前说的证书问题,还有就是我想不要对 service 文件做的更改太多了(万一有人改了回去呢
顺便 service 不要 After=network-online.target 又 Wants=network-online.target
有些奇葩情况下,因为 NetworkManager-wait-online 等的是 NetworkManager 导致等了没有意义的三十秒After=network-online.target 就好,其实可以看看现存的 service 是什么
證書問題,其實也就是權限問題,通過 root 進行,的確是很方便的,但也為安全問題帶來了隱患。
由 root 降為 nobody,其實就是縮小了 V2Ray 的權限,而犧牲的,則是一定程度上的易用性。
在安全和易用之間,總是要有所選擇,不過單就證書權限而言,其實問題不大,多執行兩三條指令罷了。
至於 .service 文件,目前的參考項目,是和 v2ray-core 中的 .service 文件隔開的。
而就你所說的,互相改來改去的情況,這也正是觀念上的衝突,就像是你我之間,你更贊同使用 root,而我則更贊同使用 nobody 一樣,這也是我之所以要設立一個參考項目,而不是直接動手修改的原因。
我更希望能夠通過討論,得到一個折中的方案。
尤其是,在目前人手緊缺,且精力不夠的情況下,處理歷史遺留問題是相當吃力的。
或許你所考慮的,是更為普遍的使用者們,大多數人或許並不關心權限問題帶來的安全隱患,所需要的,僅僅是能夠跨越長城,走向世界,足矣。
我們的選擇可以有很多,這個參考項目不會成為所謂官方腳本,當人人都在爭作官方的時候,一切就糟糕了。
事實上,原有的腳本也仍然可以拿來修修補補,但嘗試去理解一個,多種風格混合搭配,且缺少註釋的腳本絕非易事。
由於我並不擅長程式工作,這個參考項目,一方面是為了規範安裝路徑,另一方面是為了易於,在後續進行修訂手冊和教程中,有一個較為標誌的參照前提。
終於說到 After 和 Wants 了,如果我的理解沒有問題的話,是指移除 Wants,只保留 After 麼?
我查閱了該站點的內容:
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
After=network-online.target
Wants=network-online.target
這將確保在啟動服務之前,所有已配置的網路設備均已啟用並分配了 IP 地址。
但另一個前提是,必須啟用正確的 wait 服務。
After=network-online.target 保證在啟動配置的單元之前已經完全啟動 network-online.target。
Wants=network-online.target 則保證啟動配置的單元以符號連結和 network-online.target 建立依賴關係。
我查閱了該站點的內容:
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/After=network-online.target Wants=network-online.target這將確保在啟動服務之前,所有已配置的網路設備均已啟用並分配了 IP 地址。
但另一個前提是,必須啟用正確的
wait服務。
注意:这是对不联网就不能用的服务才需要这么设置的
有 Wants= 时,启动之前会尝试把 network-online.target 这个单元启动(我个人认为这会把 属于network-online.target 的服务启动,哪怕它没有被启用
有 After= 时,假设 network-online.target 在启动过程中会等待它启动好之后再启动
首先,不个人不太赞成 nobody 代替 root
其次,systemctl的用法与service是不一致的,应该是systemctl start v2ray多謝指正,稍後將去進行修改。
可以詳細說一下你不贊成使用 nobody 的原因麼?就像之前说的证书问题,还有就是我想不要对 service 文件做的更改太多了(万一有人改了回去呢
顺便 service 不要 After=network-online.target 又 Wants=network-online.target
有些奇葩情况下,因为 NetworkManager-wait-online 等的是 NetworkManager 导致等了没有意义的三十秒
After=network-online.target 就好,其实可以看看现存的 service 是什么證書問題,其實也就是權限問題,通過 root 進行,的確是很方便的,但也為安全問題帶來了隱患。
由 root 降為 nobody,其實就是縮小了 V2Ray 的權限,而犧牲的,則是一定程度上的易用性。
在安全和易用之間,總是要有所選擇,不過單就證書權限而言,其實問題不大,多執行兩三條指令罷了。
至於 .service 文件,目前的參考項目,是和 v2ray-core 中的 .service 文件隔開的。
而就你所說的,互相改來改去的情況,這也正是觀念上的衝突,就像是你我之間,你更贊同使用 root,而我則更贊同使用 nobody 一樣,這也是我之所以要設立一個參考項目,而不是直接動手修改的原因。
我更希望能夠通過討論,得到一個折中的方案。
尤其是,在目前人手緊缺,且精力不夠的情況下,處理歷史遺留問題是相當吃力的。
或許你所考慮的,是更為普遍的使用者們,大多數人或許並不關心權限問題帶來的安全隱患,所需要的,僅僅是能夠跨越長城,走向世界,足矣。
我們的選擇可以有很多,這個參考項目不會成為所謂官方腳本,當人人都在爭作官方的時候,一切就糟糕了。
事實上,原有的腳本也仍然可以拿來修修補補,但嘗試去理解一個,多種風格混合搭配,且缺少註釋的腳本絕非易事。
由於我並不擅長程式工作,這個參考項目,一方面是為了規範安裝路徑,另一方面是為了易於,在後續進行修訂手冊和教程中,有一個較為標誌的參照前提。
終於說到 After 和 Wants 了,如果我的理解沒有問題的話,是指移除 Wants,只保留 After 麼?
你说的也很有道理啊……
个人建议 After=network.taget network-online.target nss-lookup.target
保证晚于 network.target 并且域名解析也可以使用,如果有 network-online.target 就等它一会
对于 Wants=,我目前只加了 nss-lookup.target,可能未来考虑扔掉
多謝提供建議,已更正。
话说为什么去掉了 CAP_NET_RAW
多謝提供建議,已更正。
v2fly/fhs-install-v2ray@4f6d256话说为什么去掉了 CAP_NET_RAW
這是 CAP_NET_RAW 的權限:
- Use RAW and PACKET sockets;
- bind to any address for transparent proxying.
其中第二條可以由 CAP_NET_ADMIN 解決。
多謝提供建議,已更正。
我 check 這個 commit 的時候發現 Wants 這行整個都不見了,個人認爲還是還是應該把 nss-lookup 加上。
BTW 我很贊同刪去 CAP_NET_RAW 的權限,看起來應該沒問題,不知道你做過透明代理的測試了嗎?
多謝提供建議,已更正。
v2fly/fhs-install-v2ray@4f6d256我 check 這個 commit 的時候發現 Wants 這行整個都不見了,個人認爲還是還是應該把 nss-lookup 加上。
BTW 我很贊同刪去 CAP_NET_RAW 的權限,看起來應該沒問題,不知道你做過透明代理的測試了嗎?
Wants= 只是建立一個弱依賴關係,該選項中列出的單元,是否啟動成功或失敗,對整個事務的有效性沒有影響,同時也不會影響服務啟動或停止的順序。
已經做過透明代理測試,一切正常。
environment: debian10 on x86-64
issue1: proxy option failure for installation
./install-release.sh -p socks5://127.0.0.1:1080
./install-release.sh: unknown option -- -
issue2: failed to start v2ray service
● v2ray.service - V2Ray Service
Loaded: loaded (/etc/systemd/system/v2ray.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2020-04-11 00:50:59 HKT; 3s ago
Process: 9119 ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ (code=exited, status=23)
Main PID: 9119 (code=exited, status=23)
Apr 11 00:50:58 debian systemd[1]: v2ray.service: Main process exited, code=exited, status=23/n/a
Apr 11 00:50:58 debian systemd[1]: v2ray.service: Failed with result 'exit-code'.
Apr 11 00:50:59 debian systemd[1]: v2ray.service: Service RestartSec=100ms expired, scheduling restart.
Apr 11 00:50:59 debian systemd[1]: v2ray.service: Scheduled restart job, restart counter is at 5.
Apr 11 00:50:59 debian systemd[1]: Stopped V2Ray Service.
Apr 11 00:50:59 debian systemd[1]: v2ray.service: Start request repeated too quickly.
Apr 11 00:50:59 debian systemd[1]: v2ray.service: Failed with result 'exit-code'.
Apr 11 00:50:59 debian systemd[1]: Failed to start V2Ray Service.
Solution: Modify /etc/systemd/system/v2ray.service, change User=nobody to User=root
-p socks5://127.0.0.1:1080
issue1 has been resolved: https://github.com/v2fly/fhs-install-v2ray/commit/3a221f7bfd8c0d25dc2f7327aa9035bb71c6b479
I did not meet the situation mentioned in issue2, can you provide the content of your configuration file and related error logs?
-p socks5://127.0.0.1:1080
issue1 has been resolved: v2fly/fhs-install-v2ray@3a221f7
I did not meet the situation mentioned in issue2, can you provide the content of your configuration file and related error logs?
这个问题是从老安装脚本go.sh迁移至新安装脚本install-release.sh导致的,属于“兼容性”问题,非全新安装导致
即 https://www.v2fly.org/chapter_00/install.html#linuxscript 安装指导的Step4
# mv /etc/v2ray/ /usr/local/etc/
问题1.原config.json中日志默认目录一般为/etc/v2ray/error.log和/etc/v2ray/access.log,这会导致v2ray在新脚本安装后启动失败。
解决方式:修改为/usr/local/etc/v2ray/error.log和/usr/local/etc/v2ray/access.log
问题2.原文件access.log和error.log的权限是600,nobody无法修改它,修改为006后解决,nobody不属于原user
Apr 11 09:58:25 debian v2ray[15941]: main: failed to create server > v2ray.com/core/app/log: failed to initialize access logger > open /usr/local/etc/v2ray/access.log: permission denied
以上两个错误不在error.log中,使用journalctl -xe可查看
无日志文件的老用户无此问题
-p socks5://127.0.0.1:1080
issue1 has been resolved: v2fly/fhs-install-v2ray@3a221f7
I did not meet the situation mentioned in issue2, can you provide the content of your configuration file and related error logs?
https://pastebin.com/这个问题是从老安装脚本
go.sh迁移至新安装脚本install-release.sh导致的,属于“兼容性”问题,非全新安装导致
即 https://www.v2fly.org/chapter_00/install.html#linuxscript 安装指导的Step4# mv /etc/v2ray/ /usr/local/etc/问题1.原config.json中日志默认目录一般为
/etc/v2ray/error.log和/etc/v2ray/access.log,这会导致v2ray在新脚本安装后启动失败。
解决方式:修改为/usr/local/etc/v2ray/error.log和/usr/local/etc/v2ray/access.log
问题2.原文件access.log和error.log的权限是600,nobody无法修改它,修改为006后解决,nobody不属于原userApr 11 09:58:25 debian v2ray[15941]: main: failed to create server > v2ray.com/core/app/log: failed to initialize access logger > open /usr/local/etc/v2ray/access.log: permission denied以上两个错误不在
error.log中,使用journalctl -xe可查看无日志文件的老用户无此问题
感謝指出問題,稍後將更新手冊說明。
Log 文件可放置於 /var/log/v2ray/ 文件夾當中,即分別為:
該文件夾由腳本創建,專為 Log 文件而準備,可執行:
$ ls -al /var/log/v2ray/
進行查看。
Debian 下為 nobody:nogroup,CentOS 下為 nobody:nobody。
原有 Log 可直接移除,若要保留原有 Log,修改為一致即可,這裡假定原 Log 的路徑在 /usr/local/etc/v2ray/ 下,以 Debian 為例,即:
# mv /usr/local/etc/v2ray/access.log /var/log/v2ray/
# mv /usr/local/etc/v2ray/error.log /var/log/v2ray/
# chown nobody:nogroup /var/log/v2ray/access.log
# chown nobody:nogroup /var/log/v2ray/error.log
您好,请问一下用新的脚本安装以后,/usr/local/etc/v2ray/目录下会有一系列的.json文件,新的配置是用这些文件吗?因为我按照文件名称把各项配置放进去以后v2ray无法工作,而重新用回旧的config.json就没有问题。还是需要再配置些什么
您好,请问一下用新的脚本安装以后,
/usr/local/etc/v2ray/目录下会有一系列的.json文件,新的配置是用这些文件吗?因为我按照文件名称把各项配置放进去以后v2ray无法工作,而重新用回旧的config.json就没有问题。还是需要再配置些什么
这个问题太笼统了,你应该提供错误信息
這是為多文件配置而準備的簡易結構。
每個文件的默認內容都是 {},這不會對 V2Ray 的運行造成影響,具體的配置方式,請參見:
https://www.v2fly.org/chapter_02/multiple_config.html
.
├── 00_log.json
├── 01_api.json
├── 02_dns.json
├── 03_routing.json
├── 04_policy.json
├── 05_inbounds.json
├── 06_outbounds.json
├── 07_transport.json
├── 08_stats.json
└── 09_reverse.json
0 directories, 10 files
這種結構,正好對應不同的對象,可以較為簡單的,對原有的單文件配置進行拆分。
如果你的多文件配置出現問題,請檢查 Log,如果需要幫助,請把 Log 貼到 Pastebin。
如果你不需要多文件配置,直接使用單文件 config.json 也是完全沒有問題的。
@dctxmei @kslr 感谢两位的回复,之前在配置的时候没看到多文件配置这一篇,错误的原因在于没有填上log inbonds这些对象名,刚刚按照回复中的文档修改以后已经正常。
多文件配置确实要更易于维护,避免了我单文件配置中由于clients比较多,而需要上下翻几页去找其他项的问题。
多謝提供建議,已更正。
我现在对 ssl/tls 证书有一个新的想法,开一个组并假设它的名字为 readcert
然后把所有者和所有组设置为 root:readcert
假设某个服务需要读证书,在它的 groups 加 readcert 就有权限读取证书了
我现在对 ssl/tls 证书有一个新的想法,开一个组并假设它的名字为
readcert
然后把所有者和所有组设置为root:readcert
假设某个服务需要读证书,在它的 groups 加readcert就有权限读取证书了
我觉得这个问题不应该交给systemd处理,而是由v2ray处理。参考nginx等web服务器的实现:主进程以root权限运行,子进程降权后在需要的情况下跟主进程通信。
我现在对 ssl/tls 证书有一个新的想法,开一个组并假设它的名字为
readcert
然后把所有者和所有组设置为root:readcert
假设某个服务需要读证书,在它的 groups 加readcert就有权限读取证书了我觉得这个问题不应该交给systemd处理,而是由v2ray处理。参考nginx等web服务器的实现:主进程以root权限运行,子进程降权后在需要的情况下跟主进程通信。
不见得它好
请教一下各位,这两行,为什么要把.service文件以755的权限安装?
目前我系统的该目录下的大部分相类似的.service文件都是644权限的,所以我也已手动chmod 644 v2ray.service,可以正常启动服务。
请教一下各位,这两行,为什么要把.service文件以755的权限安装?
目前我系统的该目录下的大部分相类似的.service文件都是644权限的,所以我也已手动chmod 644 v2ray.service,可以正常启动服务。
755 对于配置文件没有意义
给他们开 issue/pr 吧
FHS 的全稱為「Filesystem Hierarchy Standard」,直譯為「文件系統層次結構標準」。
以下為官方站點:
目前 V2Ray 官方腳本的安裝路徑完全不符合 FHS,以下為當前的安裝路徑:
- /usr/bin/v2ray/v2ray
- /usr/bin/v2ray/v2ctl
- /usr/bin/v2ray/geoip.dat
- /usr/bin/v2ray/geosite.dat
- /etc/v2ray/config.json
嚴格來講,這並不利於服務器系統的管理,因為非包管理系統安裝的軟體應當放置於
/usr/local下,依據「4.9. /usr/local : Local hierarchy」,則路徑為:
- /usr/local/bin/v2ray
- /usr/local/bin/v2ctl
- /usr/local/lib/v2ray/geoip.dat
- /usr/local/lib/v2ray/geosite.dat
- /usr/local/etc/v2ray/config.json
並且,修改路徑也必定要修改啟動服務文件。
這裡有一個參考項目:
https://github.com/v2fly/fhs-install-v2ray在此,請各位對其加以審查,確定無誤後,將著手對官方腳本的修改。
對官方腳本的修改並不會影響到各類一鍵腳本,卻會影響到一些相關教程,對此,我認為,教程可以修改,但是,使用規範的安裝路徑,比使用不規範的安裝路徑要好很多。
我之前就一直觉得为什么会往/usr/bin/下创建文件夹,毕竟不管哪个bin目录,都是用来直接放二进制可执行的文件的。
FHS 的全稱為「Filesystem Hierarchy Standard」,直譯為「文件系統層次結構標準」。
以下為官方站點:目前 V2Ray 官方腳本的安裝路徑完全不符合 FHS,以下為當前的安裝路徑:
- /usr/bin/v2ray/v2ray
- /usr/bin/v2ray/v2ctl
- /usr/bin/v2ray/geoip.dat
- /usr/bin/v2ray/geosite.dat
- /etc/v2ray/config.json
嚴格來講,這並不利於服務器系統的管理,因為非包管理系統安裝的軟體應當放置於
/usr/local下,依據「4.9. /usr/local : Local hierarchy」,則路徑為:
- /usr/local/bin/v2ray
- /usr/local/bin/v2ctl
- /usr/local/lib/v2ray/geoip.dat
- /usr/local/lib/v2ray/geosite.dat
- /usr/local/etc/v2ray/config.json
並且,修改路徑也必定要修改啟動服務文件。
這裡有一個參考項目:
https://github.com/v2fly/fhs-install-v2ray
在此,請各位對其加以審查,確定無誤後,將著手對官方腳本的修改。
對官方腳本的修改並不會影響到各類一鍵腳本,卻會影響到一些相關教程,對此,我認為,教程可以修改,但是,使用規範的安裝路徑,比使用不規範的安裝路徑要好很多。我之前就一直觉得为什么会往
/usr/bin/下创建文件夹,毕竟不管哪个bin目录,都是用来直接放二进制可执行的文件的。
那是包管理器放置包的位置
@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。
是的,但是这是很久以前的历史问题了,不是很快就可以解决的
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。是的,但是这是很久以前的历史问题了,不是很快就可以解决的
嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。是的,但是这是很久以前的历史问题了,不是很快就可以解决的
嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。
不过目前它不是主流,并且 .dat 的位置有些不准确
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。是的,但是这是很久以前的历史问题了,不是很快就可以解决的
嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。
不过目前它不是主流,并且 .dat 的位置有些不准确
哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。是的,但是这是很久以前的历史问题了,不是很快就可以解决的
嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。
不过目前它不是主流,并且 .dat 的位置有些不准确
哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。
不是,.dat 其实更适合放在 /usr/share
因为它与主机无关
@unknowndev233 是的,第三方安装的可执行文件一般是放
/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。是的,但是这是很久以前的历史问题了,不是很快就可以解决的
嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。
不过目前它不是主流,并且 .dat 的位置有些不准确
哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。
不是,.dat 其实更适合放在 /usr/share
因为它与主机无关
哦哦
建议在install.direct 中附上文件结构的修改通知
geoip.dat 和 geosite.dat 原被放置在 /usr/local/lib/v2ray/ 當中。
這實際上不符合 FHS,現已被修正為 /usr/local/share/v2ray/。
08-16 前受此錯誤影響的用者,請按照以下示例進行修正:
# mv /usr/local/lib/v2ray/ /usr/local/share/
# systemctl edit --full v2ray.service
Environment=V2RAY_LOCATION_ASSET=/usr/local/share/v2ray/
# systemctl edit --full [email protected]
Environment=V2RAY_LOCATION_ASSET=/usr/local/share/v2ray/
issue v2fly/fhs-install-v2ray#43
虽然这么做很合理,但是也没必要把以前的安装脚本费了吧?毕竟都是bash脚本,替换了不行么?判断下安装版本不就得了?
『這裡』有你需要的,你可以建立一個 Fork。
感觉你们被微软程序员洗脑了:
你行你上
我们是为了符合规则
没有bug的项目称不上伟大
先上再说,啥事都是重装系统再来一遍就能解决的.
感觉你们被微软程序员洗脑了:
你行你上
我们是为了符合规则
没有bug的项目称不上伟大
先上再说,啥事都是重装系统再来一遍就能解决的.
只是不想守着有历史问题的老古董
虽然这么做很合理,但是也没必要把以前的安装脚本费了吧?毕竟都是bash脚本,替换了不行么?判断下安装版本不就得了?
同时维护两个安装脚本很费精力,这次旧安装脚本被废除就是因为它会按照旧文件名来下载 v2ray-core 的 release 来安装,但上游已经改变了 release assets 的命名方式,导致无法使用。
烦请您注意,这是个开源项目,参与者都是用爱发电,没有什么非得照着你的意思来。所谓你行你上在这里就是如果别人对你的需要不感兴趣,那你想实现它就只能自己来——这个道理实在很简单,不要说得好像有什么似的。
而且你希望旧的脚本继续工作,自己又不出力,那就是求人办事。我不知道你求人办事时习惯用什么态度,但至少我不会开篇就贬低别人,而且还是一句话就贬低微软和 v2ray 两组人。
最后希望你重新学习一下 bug 的定义。
新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
bash <(curl -L -s https://install.direct/go.sh)
新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
bash <(curl -L -s https://install.direct/go.sh)
我找到这个可以
https://blog.google404.org/72/
新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
bash <(curl -L -s https://install.direct/go.sh)
总结了一个「升级」步骤,从「 bash <(curl -L -s https://install.direct/go.sh)」 升级到 「bash <(curl https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)」 :
停止 V2Ray 服務
systemctl disable v2ray.service --now
移除原有文檔
rm -r /usr/bin/v2ray/
rm /etc/systemd/system/v2ray.service
rm /lib/systemd/system/v2ray.service
rm /etc/init.d/v2ray
迁配置文檔
mv /etc/v2ray/ /usr/local/etc/
使用新的安装脚本
bash <(curl https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
设置为开机自动启动
systemctl enable v2ray
启动v2ray服务,完工
systemctl start v2ray
Ubuntu 18.04 安装后只能用命令行运行,不能用service运行。service v2ray restart 后 htop 搜索不到 v2ray,进程没启动成功.
我现在是以screen的方式运行的
@Ardentwheel 我是Ubuntu20.04,你试试用我这个:
[Unit]
Description=V2Ray Service
After=network.target nss-lookup.target
[Service]
User=root
Type=simple
#CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
#NoNewPrivileges=true
Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/
Restart=on-failure
[Install]
WantedBy=multi-user.target
不过要注意一下这句:
ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/
我用的是分文件配置,你如果是单配置文件应该换成:
ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
是证书权限的问题,已经修复了,谢谢
Most helpful comment
同时维护两个安装脚本很费精力,这次旧安装脚本被废除就是因为它会按照旧文件名来下载 v2ray-core 的 release 来安装,但上游已经改变了 release assets 的命名方式,导致无法使用。
烦请您注意,这是个开源项目,参与者都是用爱发电,没有什么非得照着你的意思来。所谓你行你上在这里就是如果别人对你的需要不感兴趣,那你想实现它就只能自己来——这个道理实在很简单,不要说得好像有什么似的。
而且你希望旧的脚本继续工作,自己又不出力,那就是求人办事。我不知道你求人办事时习惯用什么态度,但至少我不会开篇就贬低别人,而且还是一句话就贬低微软和 v2ray 两组人。
最后希望你重新学习一下 bug 的定义。