summaryrefslogtreecommitdiff
path: root/roles/xray/tasks/install_xray.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/xray/tasks/install_xray.yaml')
-rw-r--r--roles/xray/tasks/install_xray.yaml100
1 files changed, 100 insertions, 0 deletions
diff --git a/roles/xray/tasks/install_xray.yaml b/roles/xray/tasks/install_xray.yaml
new file mode 100644
index 00000000..d4889531
--- /dev/null
+++ b/roles/xray/tasks/install_xray.yaml
@@ -0,0 +1,100 @@
+---
+- name: "create directory"
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: directory
+ owner: _vpn
+ group: _vpn
+ mode: 0700
+ loop:
+ - "/var/reactance/xray"
+ - "/var/reactance/xray/bin"
+ - "/var/reactance/xray/etc"
+ - "/var/reactance/xray/logs"
+ - "/var/log/xray"
+
+- name: "install golang to build xray"
+ community.general.openbsd_pkg:
+ name: go--
+ state: present
+ register: installed_go
+
+- name: "log var"
+ ansible.builtin.debug:
+ msg: "{{ is_installed }}"
+
+- name: "create temporary directory"
+ ansible.builtin.tempfile:
+ state: directory
+ suffix: temp
+ register: xray_tempdir
+ notify:
+ - remove_xray_tempdir
+
+- name: "get latest version"
+ ansible.builtin.shell: 'curl --silent "https://api.github.com/repos/XTLS/Xray-core/releases/latest" | jq -r .tag_name'
+ register: xray_latest_version
+
+- name: "download latest source"
+ ansible.builtin.get_url:
+ url: "https://github.com/XTLS/Xray-core/releases/download/{{ xray_latest_version.stdout }}/{{ xray_latest_version.stdout }}.zip"
+ dest: "{{ xray_tempdir.path }}/source.zip"
+
+- name: "additionally download latest version (for geoip.dat, geosite.dat)"
+ ansible.builtin.get_url:
+ url: "https://github.com/XTLS/Xray-core/releases/download/{{ xray_latest_version.stdout }}/Xray-openbsd-64.zip"
+ dest: "{{ xray_tempdir.path }}/xray.zip"
+
+- name: "unzip xray"
+ ansible.builtin.unarchive:
+ src: "{{ xray_tempdir.path }}/xray.zip"
+ dest: "{{ xray_tempdir.path }}"
+ remote_src: yes
+
+- name: "unzip xray source"
+ ansible.builtin.unarchive:
+ src: "{{ xray_tempdir.path }}/xray.source"
+ dest: "{{ xray_tempdir.path }}/source"
+ remote_src: yes
+
+- name: "build xray from source"
+ ansible.builtin.shell: "CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -ldflags=\"-s -w -buildid= -X 'xray.buf.readv='\" ./main"
+ args:
+ chdir: "{{ xray_tempdir.path }}/source"
+
+- name: "template out init script"
+ ansible.builtin.template:
+ src: "{{ item.file_src }}"
+ dest: "{{ item.file_dest }}"
+ loop:
+ - file_src: xray.rc.j2
+ file_dest: "{{ xray_tempdir.path }}/xray.rc"
+
+- name: "install xray"
+ ansible.builtin.shell: "{{ item }}"
+ loop:
+ - "install -m 700 -o _vpn -g bin {{ xray_tempdir.path }}/source/xray /var/reactance/xray/bin/xray"
+ - "install -m 755 -o _vpn -g bin {{ xray_tempdir.path }}/xray.rc /etc/rc.d/xray"
+ - "install -m 700 -o _vpn -g bin {{ xray_tempdir.path }}/geoip.dat /var/reactance/xray/bin/geoip.dat"
+ - "install -m 700 -o _vpn -g bin {{ xray_tempdir.path }}/geosite.dat /var/reactance/xray/bin/geosite.dat"
+
+- name: "copy chroot dependencies"
+ ansible.builtin.shell: "deps=$(ldd /var/reactance/xray/bin/xray | awk 'FNR > 3 {print $7}'); for dep in $deps; do rsync -av --relative $dep /var/reactance/xray; done"
+
+# xray will fail without these two files
+- name: "copy hosts and resolv.conf"
+ ansible.builtin.copy:
+ remote_src: true
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ loop:
+ - src: /etc/hosts
+ dest: /var/reactance/xray/etc/hosts
+ - src: /etc/resolv.conf
+ dest: /var/reactance/xray/etc/resolv.conf
+
+# - name: "uninstall golang (if wasn't installed in past)"
+# community.general.openbsd_pkg:
+# name: go--
+# state: present
+