Skip to content

Latest commit

ย 

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Xync

Linux ๋ฏธ๋Ÿฌ ์ €์žฅ์†Œ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” CLI ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

xync๋Š” rsync, wget ๊ธฐ๋ฐ˜ ๋ฏธ๋Ÿฌ๋ง์„ ์„ค์ • ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ƒํƒœ ํ™•์ธยท๋กœ๊ทธ ์กฐํšŒยท๋ฐ๋ชฌ ์‹คํ–‰ยทREST APIยทTelegram/Discord ์•Œ๋ฆผ๊นŒ์ง€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Note

Built with Python ยท uv ยท Typer ยท Rich


์ฃผ์š” ๊ธฐ๋Šฅ

  • rsync ๋ฏธ๋Ÿฌ ๋™๊ธฐํ™”: rsync:// ์†Œ์Šค ๋™๊ธฐํ™”, ์˜ต์…˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•, ๋Œ€์—ญํญ ์ œํ•œ ์ง€์›
  • HTTP/HTTPS/FTP ๋ฏธ๋Ÿฌ ๋™๊ธฐํ™”: wget ๊ธฐ๋ฐ˜ ๋ฏธ๋Ÿฌ๋ง ์ง€์›
  • ๋ฏธ๋Ÿฌ ๋ณ€๊ฒฝ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: xync mirror diff๋กœ rsync --dry-run --itemize-changes ๊ฒฐ๊ณผ ํ™•์ธ
  • ๋ณ‘๋ ฌ ๋™๊ธฐํ™”: parallel_jobs ์„ค์ •์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฏธ๋Ÿฌ๋ฅผ ๋™์‹œ์— ๋™๊ธฐํ™”
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ: interval ๋˜๋Š” cron schedule ๊ธฐ๋ฐ˜ ์ž๋™ ๋™๊ธฐํ™”
  • REST API: ๋ฏธ๋Ÿฌ ๋ชฉ๋ก, ์ƒํƒœ, ํฌ๊ธฐ ์ •๋ณด๋ฅผ HTTP API๋กœ ์กฐํšŒ
  • ์•Œ๋ฆผ: Telegram Bot API, Discord Webhook ์•Œ๋ฆผ ์ง€์›
  • ์ƒํƒœ/๋กœ๊ทธ ๊ด€๋ฆฌ: ๋งˆ์ง€๋ง‰ ๋™๊ธฐํ™” ์ƒํƒœ, ํฌ๊ธฐ ๋ณ€ํ™”, ์‹คํ–‰ ๋กœ๊ทธ ์กฐํšŒ
  • ํ—ฌ์Šค ์ฒดํฌ: ํ•„์ˆ˜ ๋„๊ตฌ, ๊ฒฝ๋กœ ๊ถŒํ•œ, URL ์Šคํ‚ด, ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  ๊ฒ€์‚ฌ
  • Rich CLI ์ถœ๋ ฅ: ํ…Œ์ด๋ธ”, ์ƒ‰์ƒ, ์ƒํƒœ ํ‘œ์‹œ๋ฅผ ํ™œ์šฉํ•œ ์ฝ๊ธฐ ์‰ฌ์šด ์ถœ๋ ฅ

์š”๊ตฌ ์‚ฌํ•ญ

๋Ÿฐํƒ€์ž„

  • Linux ํ™˜๊ฒฝ
  • uv ํŒจํ‚ค์ง€/ํˆด ๋งค๋‹ˆ์ €
  • rsync โ€” rsync ๋ฏธ๋Ÿฌ ์‚ฌ์šฉ ์‹œ ํ•„์š”
  • wget โ€” HTTP/HTTPS/FTP ๋ฏธ๋Ÿฌ ์‚ฌ์šฉ ์‹œ ํ•„์š”

์„ค์น˜

๊ถŒ์žฅ: uv tool๋กœ ์„ค์น˜

uv tool install xync
xync --help

์—…๋ฐ์ดํŠธ:

uv tool upgrade xync

์ œ๊ฑฐ:

uv tool uninstall xync

Tip

uv tool install์€ CLI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์— ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ ํŒŒ์ผ์„ PATH์— ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. PATH ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์•ˆ๋‚ด๊ฐ€ ๋‚˜์˜ค๋ฉด uv tool update-shell์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ uv๊ฐ€ ์•ˆ๋‚ดํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์…ธ PATH์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

์†Œ์Šค์—์„œ ์„ค์น˜

git clone https://github.com/xeon-dot/xync.git
cd xync
uv tool install .
xync --help

๊ฐœ๋ฐœ์šฉ ์‹คํ–‰

git clone https://github.com/xeon-dot/xync.git
cd xync
uv sync
uv run xync --help

๋น ๋ฅธ ์‹œ์ž‘

# 1. ์„ค์ • ํŒŒ์ผ ์ดˆ๊ธฐํ™”
xync init

# 2. rsync ๋ฏธ๋Ÿฌ ์ถ”๊ฐ€
xync mirror add ubuntu rsync://mirror.kakao.com/ubuntu /srv/mirrors/ubuntu

# 3. HTTP ๋ฏธ๋Ÿฌ ์ถ”๊ฐ€
xync mirror add debian http://ftp.debian.org/debian /srv/mirrors/debian --type http

# 4. ๋“ฑ๋ก๋œ ๋ฏธ๋Ÿฌ ํ™•์ธ
xync mirror list

# 5. ๋™๊ธฐํ™” ์‹คํ–‰
xync sync

# 6. ์ƒํƒœ ํ™•์ธ
xync status

์„ค์ • ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ์œ„์น˜์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

~/.config/xync/config.toml

๋‹ค๋ฅธ ์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ชจ๋“  ๋ช…๋ น์— --config-dir ๋˜๋Š” -C๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xync status --config-dir /etc/xync

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

export xync_CONFIG_DIR=/etc/xync
xync status

๋ช…๋ น์–ด

xync init

์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

xync init
xync init --config-dir /etc/xync

๋ฏธ๋Ÿฌ ๊ด€๋ฆฌ

xync mirror add

๋ฏธ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

xync mirror add NAME URL LOCAL_PATH [OPTIONS]

์˜ˆ์‹œ:

xync mirror add ubuntu rsync://mirror.kakao.com/ubuntu /srv/mirrors/ubuntu
xync mirror add debian http://ftp.debian.org/debian /srv/mirrors/debian --type http
xync mirror add arch rsync://mirror.example.org/archlinux /srv/mirrors/arch --bwlimit 50m

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช…
--type, -t ๋ฏธ๋Ÿฌ ํƒ€์ž…: rsync, http, ftp
--description, -d ๋ฏธ๋Ÿฌ ์„ค๋ช…
--bwlimit, -b rsync ๋Œ€์—ญํญ ์ œํ•œ. ์˜ˆ: 10m, 50m
--rsync-opts ๊ธฐ๋ณธ rsync ์˜ต์…˜์„ ๋Œ€์ฒดํ•  ์˜ต์…˜ ๋ฌธ์ž์—ด

๋ฏธ๋Ÿฌ ์ด๋ฆ„์€ ์˜๋ฌธ/์ˆซ์ž/ํ•˜์ดํ”ˆ/์–ธ๋”์Šค์ฝ”์–ด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xync mirror list

๋“ฑ๋ก๋œ ๋ฏธ๋Ÿฌ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

xync mirror list

xync mirror show

ํŠน์ • ๋ฏธ๋Ÿฌ์˜ ์ƒ์„ธ ์„ค์ •์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

xync mirror show ubuntu

xync mirror enable / disable

๋ฏธ๋Ÿฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๋ฏธ๋Ÿฌ๋Š” ์ „์ฒด ๋™๊ธฐํ™”์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

xync mirror disable ubuntu
xync mirror enable ubuntu

xync mirror diff

rsync ๋ฏธ๋Ÿฌ์—์„œ ์‹ค์ œ ๋™๊ธฐํ™” ์ „์— ๋ณ€๊ฒฝ๋  ํ•ญ๋ชฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

xync mirror diff ubuntu

mirror diff๋Š” rsync ๋ฏธ๋Ÿฌ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

xync mirror remove

๋ฏธ๋Ÿฌ ์„ค์ •์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

xync mirror remove ubuntu
xync mirror remove ubuntu --yes

๋™๊ธฐํ™”

xync sync

ํ™œ์„ฑํ™”๋œ ์ „์ฒด ๋ฏธ๋Ÿฌ ๋˜๋Š” ์ง€์ •ํ•œ ๋ฏธ๋Ÿฌ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

# ์ „์ฒด ํ™œ์„ฑ ๋ฏธ๋Ÿฌ ๋™๊ธฐํ™”
xync sync

# ํŠน์ • ๋ฏธ๋Ÿฌ๋งŒ ๋™๊ธฐํ™”
xync sync ubuntu

# ์—ฌ๋Ÿฌ ๋ฏธ๋Ÿฌ ๋™๊ธฐํ™”
xync sync ubuntu debian

์˜ต์…˜:

์˜ต์…˜ ์„ค๋ช…
--dry-run, -n ์‹ค์ œ ์‹คํ–‰ ์—†์ด ๋™๊ธฐํ™” ๋ช…๋ น๋งŒ ์ถœ๋ ฅ
--verbose, -v ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์ถœ๋ ฅ์„ ์ฝ˜์†”์— ํ‘œ์‹œ

์˜ˆ์‹œ:

xync sync ubuntu --dry-run
xync sync ubuntu --verbose

์ƒํƒœ, ๋กœ๊ทธ, ์ ๊ฒ€

xync status

๋ฏธ๋Ÿฌ์˜ ๋งˆ์ง€๋ง‰ ๋™๊ธฐํ™” ์ƒํƒœ, ์‹œ๊ฐ, ํฌ๊ธฐ, ํฌ๊ธฐ ๋ณ€ํ™”๋Ÿ‰์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

xync status
xync status ubuntu debian

xync log

ํŠน์ • ๋ฏธ๋Ÿฌ์˜ ์ตœ์‹  ๋™๊ธฐํ™” ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

xync log ubuntu
xync log ubuntu --lines 100

xync health

์„ค์ • ํŒŒ์ผ, ํ•„์ˆ˜ ๋„๊ตฌ, URL ์Šคํ‚ด, ๋กœ์ปฌ ๊ฒฝ๋กœ ๊ถŒํ•œ, ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ , ์•Œ๋ฆผ ์„ค์ •(ํ…”๋ ˆ๊ทธ๋žจ/๋””์Šค์ฝ”๋“œ)์„ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

xync health
xync health ubuntu

๋ฐ๋ชฌ

xync daemon์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฏธ๋Ÿฌ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘

xync daemon start

ํŠน์ • ๋ฏธ๋Ÿฌ๋งŒ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰:

xync daemon start ubuntu debian

๋™๊ธฐํ™” ์ฃผ๊ธฐ๋ฅผ ๋ช…๋ น์—์„œ ์ง€์ •:

xync daemon start --interval 3600

API ์„œ๋ฒ„๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰:

xync daemon start --api --api-port 58080

์ƒํƒœ ํ™•์ธ

xync daemon status

์ค‘์ง€

xync daemon stop
xync daemon stop --force

์žฌ์‹œ์ž‘

xync daemon restart
xync daemon restart --interval 1800 --api

๋ฐ๋ชฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์— PID ํŒŒ์ผ๊ณผ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.


REST API

API ์„œ๋ฒ„๋Š” ๋ฏธ๋Ÿฌ ์ƒํƒœ๋ฅผ HTTP๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๋… ์‹คํ–‰

xync api start
xync api start --port 58080

์ƒํƒœ ํ™•์ธ / ์ค‘์ง€

xync api status
xync api stop
xync api stop --force

์—”๋“œํฌ์ธํŠธ

Method Path ์„ค๋ช…
GET /api/status ์ „์ฒด ๋ฏธ๋Ÿฌ ์ƒํƒœ์™€ ๋ฐ๋ชฌ ์ƒํƒœ
GET /api/mirrors ๋ฏธ๋Ÿฌ ์ด๋ฆ„ ๋ชฉ๋ก
GET /api/mirrors/{name} ํŠน์ • ๋ฏธ๋Ÿฌ ์ƒํƒœ
GET /api/mirrors/{name}/size ํŠน์ • ๋ฏธ๋Ÿฌ ํฌ๊ธฐ ์ •๋ณด

์˜ˆ์‹œ:

curl http://127.0.0.1:58080/api/status

์•Œ๋ฆผ

Telegram๊ณผ Discord ์•Œ๋ฆผ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์› ์ด๋ฒคํŠธ:

  • ๋™๊ธฐํ™” ์„ฑ๊ณต
  • ๋™๊ธฐํ™” ์‹คํŒจ
  • ๋™๊ธฐํ™” ์‹œ์ž‘
  • ๋™๊ธฐํ™” ์ข…๋ฃŒ
  • ์ง„ํ–‰๋ฅ  10% ๋‹จ์œ„ ์•Œ๋ฆผ
  • ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  ์ž„๊ณ„์น˜ ์ดˆ๊ณผ ๊ฒฝ๊ณ 

Telegram ์„ค์ •

xync config set telegram.bot_token "123456:ABC-DEF"
xync config set telegram.chat_id "-100123456"

Discord ์„ค์ •

xync config set discord.bot_token "YOUR_DISCORD_BOT_TOKEN"
xync config set discord.channel_id "123456789012345678"

์•Œ๋ฆผ ์˜ต์…˜ ๋ณ€๊ฒฝ

xync config set telegram.notify_on_start true
xync config set telegram.notify_on_progress true
xync config set discord.notify_on_failure true

ํ…Œ์ŠคํŠธ ์•Œ๋ฆผ

xync notify test
xync notify test telegram
xync notify test discord

์„ค์ •

์ „์—ญ ์„ค์ •์€ xync config set KEY VALUE๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xync config show
xync config set parallel_jobs 4
xync config set daemon_interval 3600
xync config set daemon_schedule "0 */6 * * *"
xync config set disk_usage_warning_percent 85

์ฃผ์š” ์„ค์ • ํ‚ค

ํ‚ค ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
default_rsync_options -avz --delete ๊ธฐ๋ณธ rsync ์˜ต์…˜
log_dir ์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ logs ๋™๊ธฐํ™” ๋กœ๊ทธ ์ €์žฅ ๊ฒฝ๋กœ
max_log_files 30 ๋ฏธ๋Ÿฌ๋ณ„ ๋ณด๊ด€ํ•  ์ตœ๋Œ€ ๋กœ๊ทธ ํŒŒ์ผ ์ˆ˜
parallel_jobs 1 ๋ณ‘๋ ฌ ๋™๊ธฐํ™” ์ž‘์—… ์ˆ˜
daemon_interval 3600 ๋ฐ๋ชฌ ๋™๊ธฐํ™” ์ฃผ๊ธฐ(์ดˆ)
daemon_schedule ๋น„์–ด ์žˆ์Œ cron ํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„
api_enabled false ๋ฐ๋ชฌ ์‹œ์ž‘ ์‹œ API ์„œ๋ฒ„ ํ•จ๊ป˜ ์‹คํ–‰
api_port 58080 API ์„œ๋ฒ„ ํฌํŠธ
disk_usage_warning_percent 90 ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  ๊ฒฝ๊ณ  ์ž„๊ณ„์น˜
telegram.bot_token ์—†์Œ Telegram Bot API ํ† ํฐ
telegram.chat_id ์—†์Œ Telegram ์ฑ„ํŒ… ID
discord.bot_token ์—†์Œ Discord ๋ด‡ ํ† ํฐ
discord.channel_id ์—†์Œ Discord ์ฑ„๋„ ID

์•Œ๋ฆผ ํ”Œ๋ž˜๊ทธ๋Š” Telegram/Discord ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค ํŒจํ„ด ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
*.notify_on_success true ์„ฑ๊ณต ์‹œ ์•Œ๋ฆผ
*.notify_on_failure true ์‹คํŒจ ์‹œ ์•Œ๋ฆผ
*.notify_on_start false ์‹œ์ž‘ ์‹œ ์•Œ๋ฆผ
*.notify_on_finish false ์ข…๋ฃŒ ์‹œ ์•Œ๋ฆผ
*.notify_on_progress false ์ง„ํ–‰๋ฅ  10% ๋‹จ์œ„ ์•Œ๋ฆผ

์˜ˆ์‹œ:

xync config set telegram.notify_on_success true
xync config set discord.notify_on_progress false

์„ค์ • ํŒŒ์ผ ์˜ˆ์‹œ

version = 1

[global]
default_rsync_options = ["-avz", "--delete"]
log_dir = ""
max_log_files = 30
parallel_jobs = 1
daemon_interval = 3600
daemon_schedule = ""
api_enabled = false
api_port = 58080
disk_usage_warning_percent = 90

[global.telegram]
bot_token = ""
chat_id = ""
notify_on_success = true
notify_on_failure = true
notify_on_start = false
notify_on_finish = false
notify_on_progress = false

[global.discord]
bot_token = ""
channel_id = ""
notify_on_success = true
notify_on_failure = true
notify_on_start = false
notify_on_finish = false
notify_on_progress = false

[mirrors.ubuntu]
url = "rsync://mirror.kakao.com/ubuntu"
local_path = "/srv/mirrors/ubuntu"
mirror_type = "rsync"
enabled = true
description = "Ubuntu mirror"
rsync_options = ["-avz", "--delete"]
http_options = []
bandwidth_limit = "50m"
last_status = "never"

์Šค์ผ€์ค„๋ง

๋ฐ๋ชฌ์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Interval ๋ฐฉ์‹

daemon_interval ์ดˆ๋งˆ๋‹ค ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

xync config set daemon_interval 3600
xync daemon start

Cron ๋ฐฉ์‹

daemon_schedule์— cron ํ‘œํ˜„์‹์„ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ์Šค์ผ€์ค„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

xync config set daemon_schedule "0 */6 * * *"
xync daemon start

์˜ˆ์‹œ cron ํ‘œํ˜„์‹:

ํ‘œํ˜„์‹ ์˜๋ฏธ
0 */6 * * * 6์‹œ๊ฐ„๋งˆ๋‹ค ์ •๊ฐ
0 3 * * * ๋งค์ผ 03:00
30 2 * * 0 ๋งค์ฃผ ์ผ์š”์ผ 02:30

์…ธ ์ž๋™์™„์„ฑ

Typer ๊ธฐ๋ฐ˜ ์ž๋™์™„์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xync --install-completion

์ง€์› ์…ธ์€ Typer๊ฐ€ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ ์ƒˆ ์…ธ์„ ์—ด๊ฑฐ๋‚˜ ์…ธ ์„ค์ • ํŒŒ์ผ์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜์„ธ์š”.


๊ฐœ๋ฐœ

# ์˜์กด์„ฑ ์„ค์น˜
uv sync

# CLI ์‹คํ–‰
uv run xync --help

# ํ…Œ์ŠคํŠธ
uv run pytest

# ํŠน์ • ํ…Œ์ŠคํŠธ ์‹คํ–‰
uv run pytest tests/test_cli.py -v

# ๋ฆฐํŠธ
uv run ruff check src/ tests/

๋นŒ๋“œ:

uv build

๋ฌธ์ œ ํ•ด๊ฒฐ

rsync not found on PATH

rsync ๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด rsync๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo apt install -y rsync

wget not found on PATH

HTTP/HTTPS/FTP ๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด wget์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo apt install -y wget

๋ฏธ๋Ÿฌ ๊ฒฝ๋กœ ๊ถŒํ•œ ์˜ค๋ฅ˜

๋™๊ธฐํ™” ๋Œ€์ƒ ๊ฒฝ๋กœ์˜ ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๊ณ , ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo mkdir -p /srv/mirrors/ubuntu
sudo chown -R "$USER:$USER" /srv/mirrors/ubuntu
xync health ubuntu

์„ค์ • ํ™•์ธ

xync config show
xync health

๋ผ์ด์„ ์Šค

AGPL-3.0-or-later

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages