Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

依據 FHS 修改 V2Ray 的安裝路徑 #2328

Closed
ghost opened this issue Mar 14, 2020 · 77 comments
Closed

依據 FHS 修改 V2Ray 的安裝路徑 #2328

ghost opened this issue Mar 14, 2020 · 77 comments

Comments

@ghost
Copy link

ghost commented Mar 14, 2020

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

在此,請各位對其加以審查,確定無誤後,將著手對官方腳本的修改。

對官方腳本的修改並不會影響到各類一鍵腳本,卻會影響到一些相關教程,對此,我認為,教程可以修改,但是,使用規範的安裝路徑,比使用不規範的安裝路徑要好很多。

@ghost
Copy link
Author

ghost commented Mar 24, 2020

參考項目已基本可用。

@ghost
Copy link
Author

ghost commented Mar 25, 2020

考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。

一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。

@ghost
Copy link
Author

ghost commented Mar 26, 2020

依據 #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

@kslr
Copy link
Contributor

kslr commented Mar 26, 2020

如果分目录的话目前测试可以兼容运行吗

@ghost
Copy link
Author

ghost commented Mar 26, 2020

如果分目录的话目前测试可以兼容运行吗

若啟動服務文件已存在,該腳本不會對其進行修改。

在完全使用新的啟動服務文件的情況下:

對於 v4.23.0 及以上版本,v2ray.service[email protected] 皆可使用;

對於 v4.23.0 以下版本,僅可使用 [email protected]

上述情況已完成測試。

@unknowndevQwQ
Copy link
Contributor

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/

至于 systemd 的 service 文件我会处理的

@ghost
Copy link
Author

ghost commented Mar 26, 2020

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/

至于 systemd 的 service 文件我会处理的

感謝提供建議 :)

這個方法很不錯,我這就去進行修正。

@unknowndevQwQ
Copy link
Contributor

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的

感謝提供建議 :)

這個方法很不錯,我這就去進行修正。

大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置

@ghost
Copy link
Author

ghost commented Mar 26, 2020

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的

感謝提供建議 :)

這個方法很不錯,我這就去進行修正。

v2fly/fhs-install-v2ray@dccc503

@ghost
Copy link
Author

ghost commented Mar 26, 2020

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的

感謝提供建議 :)
這個方法很不錯,我這就去進行修正。

大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置

配置的遷移交給使用者手動進行會不會更好一些呢?

@unknowndevQwQ
Copy link
Contributor

其实可以参照 Arch 打包 v2ray 的方法
把所有文件扔进 /usr/local/lib/v2ray,然后把 v2rayv2ctl 软链接到 /usr/local/bin 里,这样可以扔掉 Environment=V2RAY_LOCATION_ASSET=/usr/local/lib/v2ray/
至于 systemd 的 service 文件我会处理的

感謝提供建議 :)
這個方法很不錯,我這就去進行修正。

大概明天或者后天,我会修 service 文件,根据这个 issue,脚本安装时或许需要配置迁移或者 sed -i 's/orig/new/' 替换一些配置

配置的遷移交給使用者手動進行會不會更好一些呢?

或许可以作为可选并默认不启用选项,让用户自己选择

@unknowndevQwQ
Copy link
Contributor

依據 #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 导致很多人的透明代理出现问题

@unknowndevQwQ
Copy link
Contributor

考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。

一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。

鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择

@ghost
Copy link
Author

ghost commented Mar 26, 2020

依據 #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

但低位端口卻開啟失敗了呢。

@unknowndevQwQ
Copy link
Contributor

依據 #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 的意思

@ghost
Copy link
Author

ghost commented Mar 26, 2020

考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。

鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择

這也正是我感到糾結的地方。

說句可能惹人生氣的話:「老東西,你早該被淘汰啦」。

或許需要有一個過渡期比較好?

@unknowndevQwQ
Copy link
Contributor

考慮到目前絕大多數的 Linux 發行版已經切換到 systemd,參考項目中已移除對 System V 的支援。
一些特殊的 Linux 發行版及作業系統,如 Arch Linux、Gentoo 和 FreeBSD,都有著自己的解決方案,可直接通過其官方軟體倉庫安裝 V2Ray。

鉴于部分用户还在用类似 centos6 的老古董,直接去掉可能不是一个好的选择

這也正是我感到糾結的地方。

說句可能惹人生氣的話:「老東西,你早該被淘汰啦」。

或許需要有一個過渡期比較好?

其实我也认为 centos6 应该扔掉了
它实在旧的过分,早就不适合在生产环境使用了

@unknowndevQwQ
Copy link
Contributor

unknowndevQwQ commented Mar 26, 2020

依據 #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 才正常

@ghost
Copy link
Author

ghost commented Mar 26, 2020

@unknowndev233 那應該是這樣麼?

AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW

@unknowndevQwQ
Copy link
Contributor

@unknowndev233 那應該是這樣麼?

AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW

是的

@IceCodeNew
Copy link
Contributor

其实我也认为 centos6 应该扔掉了
它实在旧的过分,早就不适合在生产环境使用了

附议

@unknowndevQwQ
Copy link
Contributor

不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root

@ghost
Copy link
Author

ghost commented Mar 26, 2020

不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root

直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。

@unknowndevQwQ
Copy link
Contributor

不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root

直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。

但是你我都不知道有多少人直接在 v2ray 直接用证书

@ghost
Copy link
Author

ghost commented Mar 26, 2020

不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root

直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。

但是你我都不知道有多少人直接在 v2ray 直接用证书

我參考了兩個模板項目的當前狀況。

vTemplate 需要 V2Ray 直接使用證書文件的有:

為 5/16。

v2ray-template 需要 V2Ray 直接使用證書文件的有:

為 4/19。

並且,有許多人是在使用各類第三方腳本進行部署。

我認為修改是值得的,可以先貼出信息,待一定時間後再進行修改。

@unknowndevQwQ
Copy link
Contributor

不过在用户变为普通用户时,证书之类的文件可能需要手动设置所有者
所以为了避免出现意外,可能用户还是需要保持为 root

直接通過 V2Ray 使用證書文件的情況不多,一般是通過 Web server 來使用證書文件了,即便的確需要使用,也只需要證書文件及其所在目錄為 nobody:nogroup 或 nobody:nobody,或是證書文件及其所在目錄對其它用戶有可讀權限即可,我認為還是避免使用 root 為好。

但是你我都不知道有多少人直接在 v2ray 直接用证书

我參考了兩個模板項目的當前狀況。

vTemplate 需要 V2Ray 直接使用證書文件的有:

為 5/16。

v2ray-template 需要 V2Ray 直接使用證書文件的有:

為 4/19。

並且,有許多人是在使用各類第三方腳本進行部署。

我認為修改是值得的,可以先貼出信息,待一定時間後再進行修改。

那就这么做咯

@ghost
Copy link
Author

ghost commented Mar 26, 2020

@kslr 我能否在 v2ray/manualv2fly/manual 中寫下相關信息,以保證使用者們有足夠的時間來提前瞭解相關修改呢?

@kslr
Copy link
Contributor

kslr commented Mar 26, 2020

文档中“下载安装”包含了这些信息,更新下就可以了。

@sixg0000d
Copy link

请教一下各位,这两行,为什么要把.service文件以755的权限安装?
目前我系统的该目录下的大部分相类似的.service文件都是644权限的,所以我也已手动chmod 644 v2ray.service,可以正常启动服务。

@unknowndevQwQ
Copy link
Contributor

请教一下各位,这两行,为什么要把.service文件以755的权限安装?
目前我系统的该目录下的大部分相类似的.service文件都是644权限的,所以我也已手动chmod 644 v2ray.service,可以正常启动服务。

755 对于配置文件没有意义
给他们开 issue/pr 吧

@xiebruce
Copy link

xiebruce commented Jun 8, 2020

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目录,都是用来直接放二进制可执行的文件的。

@unknowndevQwQ
Copy link
Contributor

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目录,都是用来直接放二进制可执行的文件的。

那是包管理器放置包的位置

@xiebruce
Copy link

xiebruce commented Jun 9, 2020

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

@unknowndevQwQ
Copy link
Contributor

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

@xiebruce
Copy link

xiebruce commented Jun 9, 2020

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。

@unknowndevQwQ
Copy link
Contributor

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。

不过目前它不是主流,并且 .dat 的位置有些不准确

@xiebruce
Copy link

xiebruce commented Jun 9, 2020

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。

不过目前它不是主流,并且 .dat 的位置有些不准确

哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。

@unknowndevQwQ
Copy link
Contributor

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。

不过目前它不是主流,并且 .dat 的位置有些不准确

哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。

不是,.dat 其实更适合放在 /usr/share
因为它与主机无关

@xiebruce
Copy link

xiebruce commented Jun 9, 2020

@unknowndev233 是的,第三方安装的可执行文件一般是放/usr/local/bin/比较多,但我的意思是,就算是往/usr/bin/放,那也不应该放文件夹,而应该只放可执行文件。

是的,但是这是很久以前的历史问题了,不是很快就可以解决的

嗯嗯,就是说说哈哈,这个issue不就是解决这个问题的嘛,新的安装方法都有了。

不过目前它不是主流,并且 .dat 的位置有些不准确

哦?.dat 文件是不是要跟v2ray可执行文件放一起?因为我看配置文件里也没有引用这个文件,所以只能怀疑是v2ray可执行文件直接读取当前目录下的dat了,不知道是不是这样?我是没去了解原理。

不是,.dat 其实更适合放在 /usr/share
因为它与主机无关

哦哦

@meymself
Copy link

建议在install.direct 中附上文件结构的修改通知

@ghost
Copy link
Author

ghost commented Aug 15, 2020

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

@mbcc2006
Copy link

虽然这么做很合理,但是也没必要把以前的安装脚本费了吧?毕竟都是bash脚本,替换了不行么?判断下安装版本不就得了?

@ghost
Copy link
Author

ghost commented Aug 16, 2020

這裡』有你需要的,你可以建立一個 Fork。

@mbcc2006
Copy link

感觉你们被微软程序员洗脑了:
你行你上
我们是为了符合规则
没有bug的项目称不上伟大
先上再说,啥事都是重装系统再来一遍就能解决的.

@unknowndevQwQ
Copy link
Contributor

感觉你们被微软程序员洗脑了:
你行你上
我们是为了符合规则
没有bug的项目称不上伟大
先上再说,啥事都是重装系统再来一遍就能解决的.

只是不想守着有历史问题的老古董

@IceCodeNew
Copy link
Contributor

虽然这么做很合理,但是也没必要把以前的安装脚本费了吧?毕竟都是bash脚本,替换了不行么?判断下安装版本不就得了?

同时维护两个安装脚本很费精力,这次旧安装脚本被废除就是因为它会按照旧文件名来下载 v2ray-core 的 release 来安装,但上游已经改变了 release assets 的命名方式,导致无法使用。
烦请您注意,这是个开源项目,参与者都是用爱发电,没有什么非得照着你的意思来。所谓你行你上在这里就是如果别人对你的需要不感兴趣,那你想实现它就只能自己来——这个道理实在很简单,不要说得好像有什么似的。
而且你希望旧的脚本继续工作,自己又不出力,那就是求人办事。我不知道你求人办事时习惯用什么态度,但至少我不会开篇就贬低别人,而且还是一句话就贬低微软和 v2ray 两组人。
最后希望你重新学习一下 bug 的定义。

@1265578519
Copy link

新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
bash <(curl -L -s https://install.direct/go.sh)

@chokees
Copy link

chokees commented Aug 20, 2020

新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
bash <(curl -L -s https://install.direct/go.sh)

我找到这个可以
https://blog.google404.org/72/

@ms64mb
Copy link

ms64mb commented Sep 5, 2020

新版本怎么用啊,能给个方法吗?不会安装了
以前的用不了了
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)」

  1. 停止 V2Ray 服務
    systemctl disable v2ray.service --now

  2. 移除原有文檔
    rm -r /usr/bin/v2ray/
    rm /etc/systemd/system/v2ray.service
    rm /lib/systemd/system/v2ray.service
    rm /etc/init.d/v2ray

  3. 迁配置文檔
    mv /etc/v2ray/ /usr/local/etc/

  4. 使用新的安装脚本
    bash <(curl https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

  5. 设置为开机自动启动
    systemctl enable v2ray

  6. 启动v2ray服务,完工
    systemctl start v2ray

@Ardentwheel
Copy link

Ardentwheel commented Sep 19, 2020

Ubuntu 18.04 安装后只能用命令行运行,不能用service运行。service v2ray restart 后 htop 搜索不到 v2ray,进程没启动成功.
我现在是以screen的方式运行的

@xiebruce
Copy link

xiebruce commented Sep 20, 2020

@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

@Ardentwheel
Copy link

是证书权限的问题,已经修复了,谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests