sterepando commited on
Commit
1bd97cc
·
verified ·
1 Parent(s): 34933ae

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +104 -99
Dockerfile CHANGED
@@ -1,10 +1,9 @@
1
  FROM rust:slim-bullseye
2
 
3
- # 1. Установка зависимостей
4
  RUN apt-get update && apt-get install -y \
5
  curl \
6
  unzip \
7
- python3 \
8
  build-essential \
9
  libssl-dev \
10
  pkg-config \
@@ -21,113 +20,119 @@ RUN curl -Lo ndk.zip https://dl.google.com/android/repository/android-ndk-r25c-l
21
  ENV ANDROID_NDK_HOME=/opt/android-ndk
22
  ENV PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
23
 
24
- # 3. Настройка Rust для Android
25
  RUN rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
26
  RUN cargo install cargo-ndk
27
 
28
- # 4. Создание проекта Rust
29
  WORKDIR /app
30
  RUN cargo init --lib --name vless_core
31
 
32
- # 5. Настройка Cargo.toml (ИСПРАВЛЕНО: добавлена секция [package])
33
- RUN printf '[package]\n\
34
- name = "vless_core"\n\
35
- version = "0.1.0"\n\
36
- edition = "2021"\n\
37
- \n\
38
- [lib]\n\
39
- crate-type = ["cdylib"]\n\
40
- \n\
41
- [dependencies]\n\
42
- tokio = { version = "1", features = ["full"] }\n\
43
- libc = "0.2"\n\
44
- anyhow = "1.0"\n\
45
- log = "0.4"\n\
46
- android_logger = "0.13"\n\
47
- lazy_static = "1.4"\n\
48
- serde = { version = "1.0", features = ["derive"] }\n\
49
- serde_json = "1.0"\n' > Cargo.toml
50
-
51
- # 6. Написание исходного кода (src/lib.rs)
52
- # Используем printf для корректной обработки переносов строк и спецсимволов
53
- RUN printf 'use std::ffi::CStr;\n\
54
- use std::os::raw::{c_char, c_int};\n\
55
- use std::sync::{Arc, Mutex};\n\
56
- use log::{info, error, LevelFilter};\n\
57
- use android_logger::Config;\n\
58
- use tokio::runtime::Runtime;\n\
59
- use tokio::task::JoinHandle;\n\
60
- \n\
61
- lazy_static::lazy_static! {\n\
62
- static ref RUNTIME: Runtime = Runtime::new().unwrap();\n\
63
- static ref VPN_HANDLE: Arc<Mutex<Option<JoinHandle<()>>>> = Arc::new(Mutex::new(None));\n\
64
- }\n\
65
- \n\
66
- #[no_mangle]\n\
67
- pub extern "C" fn init_logger() {\n\
68
- android_logger::init_once(Config::default().with_max_level(LevelFilter::Info).with_tag("MandreVlessNative"));\n\
69
- info!("Native Logger Initialized");\n\
70
- }\n\
71
- \n\
72
- #[derive(serde::Deserialize)]\n\
73
- struct VlessConfig {\n\
74
- uuid: String,\n\
75
- address: String,\n\
76
- port: u16,\n\
77
- }\n\
78
- \n\
79
- async fn vless_worker(config: VlessConfig) {\n\
80
- info!("Starting VLESS Core connecting to {}:{}", config.address, config.port);\n\
81
- loop {\n\
82
- info!("VLESS Keepalive: Ping to {}", config.address);\n\
83
- tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;\n\
84
- }\n\
85
- }\n\
86
- \n\
87
- #[no_mangle]\n\
88
- pub extern "C" fn start_vless(config_json: *const c_char) -> c_int {\n\
89
- let c_str = unsafe { if config_json.is_null() { return -1; } CStr::from_ptr(config_json) };\n\
90
- let str_slice = match c_str.to_str() {\n\
91
- Ok(s) => s,\n\
92
- Err(_) => return -2,\n\
93
- };\n\
94
- \n\
95
- let config: VlessConfig = match serde_json::from_str(str_slice) {\n\
96
- Ok(c) => c,\n\
97
- Err(e) => {\n\
98
- error!("Config parse error: {}", e);\n\
99
- return -3;\n\
100
- }\n\
101
- };\n\
102
- \n\
103
- let mut handle = VPN_HANDLE.lock().unwrap();\n\
104
- if handle.is_some() {\n\
105
- return 1;\n\
106
- }\n\
107
- \n\
108
- *handle = Some(RUNTIME.spawn(vless_worker(config)));\n\
109
- info!("VLESS Service Started");\n\
110
- return 0;\n\
111
- }\n\
112
- \n\
113
- #[no_mangle]\n\
114
- pub extern "C" fn stop_vless() -> c_int {\n\
115
- let mut handle = VPN_HANDLE.lock().unwrap();\n\
116
- if let Some(h) = handle.take() {\n\
117
- h.abort();\n\
118
- info!("VLESS Service Stopped");\n\
119
- return 0;\n\
120
- }\n\
121
- return 1;\n\
122
- }\n' > src/lib.rs
123
-
124
- # 7. Сборка библиотек под разные архитектуры
 
 
 
 
 
 
125
  RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
126
 
127
- # 8. Упаковка в ZIP
128
  WORKDIR /app
129
  RUN zip -r vless_libs.zip jniLibs
130
 
131
- # 9. Запуск сервера для скачивания
132
  EXPOSE 7860
133
  CMD ["python3", "-m", "http.server", "7860"]
 
1
  FROM rust:slim-bullseye
2
 
3
+ # 1. Установка системных зависимостей
4
  RUN apt-get update && apt-get install -y \
5
  curl \
6
  unzip \
 
7
  build-essential \
8
  libssl-dev \
9
  pkg-config \
 
20
  ENV ANDROID_NDK_HOME=/opt/android-ndk
21
  ENV PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
22
 
23
+ # 3. Настройка Rust таргетов
24
  RUN rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
25
  RUN cargo install cargo-ndk
26
 
27
+ # 4. Инициализация проекта
28
  WORKDIR /app
29
  RUN cargo init --lib --name vless_core
30
 
31
+ # 5. Создание Cargo.toml (через cat EOF для надежности)
32
+ RUN cat <<EOF > Cargo.toml
33
+ [package]
34
+ name = "vless_core"
35
+ version = "0.1.0"
36
+ edition = "2021"
37
+
38
+ [lib]
39
+ crate-type = ["cdylib"]
40
+
41
+ [dependencies]
42
+ tokio = { version = "1", features = ["full"] }
43
+ libc = "0.2"
44
+ anyhow = "1.0"
45
+ log = "0.4"
46
+ android_logger = "0.13"
47
+ lazy_static = "1.4"
48
+ serde = { version = "1.0", features = ["derive"] }
49
+ serde_json = "1.0"
50
+ EOF
51
+
52
+ # 6. Создание src/lib.rs (Исправлен импорт Serde)
53
+ RUN cat <<EOF > src/lib.rs
54
+ use std::ffi::CStr;
55
+ use std::os::raw::{c_char, c_int};
56
+ use std::sync::{Arc, Mutex};
57
+ use log::{info, error, LevelFilter};
58
+ use android_logger::Config;
59
+ use tokio::runtime::Runtime;
60
+ use tokio::task::JoinHandle;
61
+ use serde::Deserialize; // Явный импорт для устранения ошибки E0277
62
+
63
+ lazy_static::lazy_static! {
64
+ static ref RUNTIME: Runtime = Runtime::new().unwrap();
65
+ static ref VPN_HANDLE: Arc<Mutex<Option<JoinHandle<()>>>> = Arc::new(Mutex::new(None));
66
+ }
67
+
68
+ #[no_mangle]
69
+ pub extern "C" fn init_logger() {
70
+ android_logger::init_once(Config::default().with_max_level(LevelFilter::Info).with_tag("MandreVlessNative"));
71
+ info!("Native Logger Initialized");
72
+ }
73
+
74
+ // Добавлен дериватив Deserialize
75
+ #[derive(Deserialize)]
76
+ struct VlessConfig {
77
+ uuid: String,
78
+ address: String,
79
+ port: u16,
80
+ }
81
+
82
+ async fn vless_worker(config: VlessConfig) {
83
+ info!("Starting VLESS Core connecting to {}:{}", config.address, config.port);
84
+ loop {
85
+ // Здесь будет реальная логика VLESS (TCP/UDP стримы)
86
+ info!("VLESS Keepalive: Ping to {}", config.address);
87
+ tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
88
+ }
89
+ }
90
+
91
+ #[no_mangle]
92
+ pub extern "C" fn start_vless(config_json: *const c_char) -> c_int {
93
+ let c_str = unsafe { if config_json.is_null() { return -1; } CStr::from_ptr(config_json) };
94
+ let str_slice = match c_str.to_str() {
95
+ Ok(s) => s,
96
+ Err(_) => return -2,
97
+ };
98
+
99
+ let config: VlessConfig = match serde_json::from_str(str_slice) {
100
+ Ok(c) => c,
101
+ Err(e) => {
102
+ error!("Config parse error: {}", e);
103
+ return -3;
104
+ }
105
+ };
106
+
107
+ let mut handle = VPN_HANDLE.lock().unwrap();
108
+ if handle.is_some() {
109
+ return 1;
110
+ }
111
+
112
+ *handle = Some(RUNTIME.spawn(vless_worker(config)));
113
+ info!("VLESS Service Started");
114
+ return 0;
115
+ }
116
+
117
+ #[no_mangle]
118
+ pub extern "C" fn stop_vless() -> c_int {
119
+ let mut handle = VPN_HANDLE.lock().unwrap();
120
+ if let Some(h) = handle.take() {
121
+ h.abort();
122
+ info!("VLESS Service Stopped");
123
+ return 0;
124
+ }
125
+ return 1;
126
+ }
127
+ EOF
128
+
129
+ # 7. Компиляция
130
  RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
131
 
132
+ # 8. Упаковка
133
  WORKDIR /app
134
  RUN zip -r vless_libs.zip jniLibs
135
 
136
+ # 9. Сервер раздачи
137
  EXPOSE 7860
138
  CMD ["python3", "-m", "http.server", "7860"]