Spaces:
Paused
Paused
Update Dockerfile
Browse files- 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
|
| 25 |
RUN rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
|
| 26 |
RUN cargo install cargo-ndk
|
| 27 |
|
| 28 |
-
# 4.
|
| 29 |
WORKDIR /app
|
| 30 |
RUN cargo init --lib --name vless_core
|
| 31 |
|
| 32 |
-
# 5.
|
| 33 |
-
RUN
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
use std::
|
| 56 |
-
use
|
| 57 |
-
use
|
| 58 |
-
use
|
| 59 |
-
use
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
}
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
let
|
| 96 |
-
Ok(
|
| 97 |
-
Err(
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
}
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
|
| 126 |
|
| 127 |
-
# 8. Упаковка
|
| 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"]
|