Skip to content

Commit 106120d

Browse files
author
Suyunjing
authored
feat(linux): remove bundled rclone from deb/rpm packages (#138)
1 parent 0dae544 commit 106120d

17 files changed

Lines changed: 332 additions & 271 deletions

File tree

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@
102102
"vue-eslint-parser": "^10.2.0",
103103
"vue-tsc": "^3.0.6"
104104
},
105-
"overrides": {
106-
"tmp": "^0.2.4"
105+
"resolutions": {
106+
"tmp": "^0.2.4",
107+
"js-yaml": "^4.1.1",
108+
"glob": "^10.5.0"
107109
}
108110
}

scripts/prepare.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,19 @@ async function main() {
249249
)
250250
)
251251

252-
await retryTask('rclone', async () => {
253-
await getLatestRcloneVersion()
254-
await resolveSidecar(
255-
createBinaryInfo('rclone', getRcloneArchMap(rcloneVersion), `https://downloads.rclone.org`, rcloneVersion)
256-
)
257-
})
252+
// Only bundle rclone for Windows and macOS, Linux users should install rclone from system package manager
253+
const isLinux = platform === 'linux'
254+
if (!isLinux) {
255+
await retryTask('rclone', async () => {
256+
await getLatestRcloneVersion()
257+
await resolveSidecar(
258+
createBinaryInfo('rclone', getRcloneArchMap(rcloneVersion), `https://downloads.rclone.org`, rcloneVersion)
259+
)
260+
})
261+
} else {
262+
console.log('Skipping rclone download for Linux - users should install rclone from system package manager')
263+
}
264+
258265
if (isWin) {
259266
await resolvePlugins()
260267
}

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/src/cmd/rclone_core.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ use crate::utils::path::{get_app_logs_dir, get_rclone_binary_path, get_rclone_co
1010
// admin:admin base64 encoded
1111
pub const RCLONE_AUTH: &str = "Basic YWRtaW46YWRtaW4=";
1212

13+
#[tauri::command]
14+
pub async fn check_rclone_available() -> Result<bool, String> {
15+
get_rclone_binary_path().map(|_| true).or(Ok(false))
16+
}
17+
1318
#[tauri::command]
1419
pub async fn create_and_start_rclone_backend(
1520
state: State<'_, AppState>,

src-tauri/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ use cmd::os_operate::{
2727
open_url_in_browser, select_directory, update_tool_version,
2828
};
2929
use cmd::rclone_core::{
30-
create_and_start_rclone_backend, create_rclone_backend_process, get_rclone_backend_status,
30+
check_rclone_available, create_and_start_rclone_backend, create_rclone_backend_process,
31+
get_rclone_backend_status,
3132
};
3233
use cmd::rclone_mount::{
3334
check_mount_status, create_rclone_mount_remote_process, get_mount_info_list,
@@ -126,6 +127,7 @@ pub fn run() {
126127
create_openlist_core_process,
127128
get_openlist_core_status,
128129
get_rclone_backend_status,
130+
check_rclone_available,
129131
create_rclone_backend_process,
130132
create_and_start_rclone_backend,
131133
rclone_list_config,

src-tauri/src/utils/path.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,30 @@ pub fn get_openlist_binary_path() -> Result<PathBuf, String> {
115115
}
116116

117117
pub fn get_rclone_binary_path() -> Result<PathBuf, String> {
118-
get_binary_path("rclone", "Rclone")
118+
// Windows/macOS: rclone is bundled with the app
119+
#[cfg(not(target_os = "linux"))]
120+
{
121+
get_binary_path("rclone", "Rclone")
122+
}
123+
124+
// Linux: rclone is not bundled, find it in system PATH
125+
#[cfg(target_os = "linux")]
126+
{
127+
use std::process::Command;
128+
if let Ok(output) = Command::new("which").arg("rclone").output()
129+
&& output.status.success()
130+
{
131+
let path_str = String::from_utf8_lossy(&output.stdout).trim().to_string();
132+
if !path_str.is_empty() {
133+
return Ok(PathBuf::from(path_str));
134+
}
135+
}
136+
Err(
137+
"Rclone not found. Please install it via your package manager (e.g., apt install \
138+
rclone)"
139+
.to_string(),
140+
)
141+
}
119142
}
120143

121144
pub fn get_app_config_dir() -> Result<PathBuf, String> {

src-tauri/tauri.conf.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
"icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"],
3636
"externalBin": [
3737
"binary/openlist",
38-
"binary/rclone",
3938
"binary/install-openlist-service",
4039
"binary/openlist-desktop-service",
4140
"binary/uninstall-openlist-service"

src-tauri/tauri.linux.conf.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"linux": {
77
"deb": {
88
"depends": ["openssl"],
9+
"recommends": ["rclone"],
910
"desktopTemplate": "./packages/linux/openlist.desktop",
1011
"provides": ["openlist-desktop"],
1112
"conflicts": ["openlist-desktop"],
@@ -15,6 +16,7 @@
1516
},
1617
"rpm": {
1718
"depends": ["openssl"],
19+
"recommends": ["rclone"],
1820
"desktopTemplate": "./packages/linux/openlist.desktop",
1921
"provides": ["openlist-desktop"],
2022
"conflicts": ["openlist-desktop"],
@@ -27,8 +29,7 @@
2729
"./binary/install-openlist-service",
2830
"./binary/uninstall-openlist-service",
2931
"./binary/openlist-desktop-service",
30-
"./binary/openlist",
31-
"./binary/rclone"
32+
"./binary/openlist"
3233
]
3334
}
3435
}

src-tauri/tauri.macos.conf.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@
2929
"exceptionDomain": "",
3030
"signingIdentity": null,
3131
"entitlements": "packages/macos/entitlements.plist"
32-
}
32+
},
33+
"externalBin": [
34+
"./binary/install-openlist-service",
35+
"./binary/uninstall-openlist-service",
36+
"./binary/openlist-desktop-service",
37+
"./binary/openlist",
38+
"./binary/rclone"
39+
]
3340
}
3441
}

src-tauri/tauri.windows.conf.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
"installMode": "perMachine",
1919
"template": "./packages/windows/installer.nsi"
2020
}
21-
}
21+
},
22+
"externalBin": [
23+
"./binary/install-openlist-service",
24+
"./binary/uninstall-openlist-service",
25+
"./binary/openlist-desktop-service",
26+
"./binary/openlist",
27+
"./binary/rclone"
28+
]
2229
}
2330
}

0 commit comments

Comments
 (0)