@@ -158,6 +158,59 @@ CHECK() {
158158ADMIN_USER=" "
159159ADMIN_PASS=" "
160160
161+ # Function to build correct filename
162+ build_filename () {
163+ local version=" $1 "
164+ local os_name=$( uname -s | tr ' [:upper:]' ' [:lower:]' )
165+ local arch_name=" "
166+
167+ # Determine architecture part in filename based on system architecture
168+ if [ " $ARCH " = " amd64" ]; then
169+ arch_name=" amd64"
170+ elif [ " $ARCH " = " arm64" ]; then
171+ arch_name=" arm64"
172+ else
173+ echo " alist-linux-musl-$ARCH .tar.gz" # Fallback to original format
174+ return 0
175+ fi
176+
177+ # Determine filename based on operating system
178+ case " $os_name " in
179+ " linux" )
180+ echo " alist-$version -linux-musl-$arch_name .tar.gz"
181+ ;;
182+ " darwin" )
183+ echo " alist-$version -darwin-$arch_name .tar.gz"
184+ ;;
185+ " freebsd" )
186+ echo " alist-$version -freebsd-$arch_name .tar.gz"
187+ ;;
188+ * )
189+ echo " alist-$version -linux-musl-$arch_name .tar.gz" # Default to linux-musl
190+ ;;
191+ esac
192+ }
193+
194+ # Function to get latest version information
195+ get_latest_version () {
196+ local api_url=" https://dapi.alistgo.com/v0/version/latest"
197+ local version_info=$( curl -s --connect-timeout 10 " $api_url " 2> /dev/null)
198+
199+ if [ $? -eq 0 ] && [ -n " $version_info " ]; then
200+ # Parse JSON to get version and filename
201+ local version=$( echo " $version_info " | grep -o ' "version":"[^"]*"' | cut -d' "' -f4)
202+ local platform=$( echo " $version_info " | grep -o ' "platform":"[^"]*"' | cut -d' "' -f4)
203+ local download_url=$( echo " $version_info " | grep -o ' "download_url":"[^"]*"' | cut -d' "' -f4)
204+
205+ if [ -n " $version " ] && [ -n " $platform " ] && [ -n " $download_url " ]; then
206+ echo " $version |$platform |$download_url "
207+ return 0
208+ fi
209+ fi
210+
211+ return 1
212+ }
213+
161214# Download function with retry mechanism
162215download_file () {
163216 local url=" $1 "
@@ -190,13 +243,67 @@ INSTALL() {
190243 # Save current directory
191244 CURRENT_DIR=$( pwd)
192245
193- # Download Alist program
194- echo -e " \r\n${GREEN_COLOR} Downloading Alist...${RES} "
246+ # Get latest version information
247+ echo -e " ${GREEN_COLOR} Getting latest version information...${RES} "
248+ local version_info=$( get_latest_version)
195249
196- # Download from GitHub source
197- if ! download_file " ${GH_DOWNLOAD_URL} /alist-linux-musl-$ARCH .tar.gz" " /tmp/alist.tar.gz" ; then
198- echo -e " ${RED_COLOR} Download failed!${RES} "
199- exit 1
250+ if [ $? -eq 0 ] && [ -n " $version_info " ]; then
251+ local version=$( echo " $version_info " | cut -d' |' -f1)
252+ local platform=$( echo " $version_info " | cut -d' |' -f2)
253+ local download_url=$( echo " $version_info " | cut -d' |' -f3)
254+
255+ echo -e " ${GREEN_COLOR} Latest version: $version ${RES} "
256+
257+ # Ask user to choose download source
258+ echo -e " ${GREEN_COLOR} Please choose download source:${RES} "
259+ echo -e " ${GREEN_COLOR} 1. Use official mirror (recommended)${RES} "
260+ echo -e " ${GREEN_COLOR} 2. Use GitHub source${RES} "
261+ read -p " Please choose [1-2]: " download_choice
262+
263+ case " ${download_choice:- 1} " in
264+ 1)
265+ # Use official mirror
266+ local filename=$( build_filename " $version " )
267+ local official_url=" https://alistgo.com/download/Alist/v$version /$filename "
268+ echo -e " ${GREEN_COLOR} Using official mirror: $official_url ${RES} "
269+
270+ # Download Alist program
271+ echo -e " \r\n${GREEN_COLOR} Downloading Alist...${RES} "
272+ if ! download_file " $official_url " " /tmp/alist.tar.gz" ; then
273+ echo -e " ${RED_COLOR} Official mirror download failed!${RES} "
274+ exit 1
275+ fi
276+ ;;
277+ 2)
278+ # Use GitHub source
279+ echo -e " ${GREEN_COLOR} Using GitHub source${RES} "
280+
281+ # Download Alist program
282+ echo -e " \r\n${GREEN_COLOR} Downloading Alist...${RES} "
283+ local github_filename=$( build_filename " $version " )
284+ if ! download_file " ${GH_DOWNLOAD_URL} /$github_filename " " /tmp/alist.tar.gz" ; then
285+ echo -e " ${RED_COLOR} Download failed!${RES} "
286+ exit 1
287+ fi
288+ ;;
289+ * )
290+ echo -e " ${RED_COLOR} Invalid choice, using default GitHub source${RES} "
291+ local github_filename=$( build_filename " $version " )
292+ if ! download_file " ${GH_DOWNLOAD_URL} /$github_filename " " /tmp/alist.tar.gz" ; then
293+ echo -e " ${RED_COLOR} Download failed!${RES} "
294+ exit 1
295+ fi
296+ ;;
297+ esac
298+ else
299+ echo -e " ${YELLOW_COLOR} Unable to get latest version information, using default GitHub source${RES} "
300+
301+ # Download Alist program
302+ echo -e " \r\n${GREEN_COLOR} Downloading Alist...${RES} "
303+ if ! download_file " ${GH_DOWNLOAD_URL} /alist-linux-musl-$ARCH .tar.gz" " /tmp/alist.tar.gz" ; then
304+ echo -e " ${RED_COLOR} Download failed!${RES} "
305+ exit 1
306+ fi
200307 fi
201308
202309 # Extract files
@@ -304,21 +411,111 @@ UPDATE() {
304411
305412 echo -e " ${GREEN_COLOR} Starting Alist update...${RES} "
306413
307- # Stop Alist service
308- echo -e " ${GREEN_COLOR} Stopping Alist process${RES} \r\n"
309- systemctl stop alist
414+ # Get latest version information
415+ echo -e " ${GREEN_COLOR} Getting latest version information...${RES} "
416+ local version_info=$( get_latest_version)
417+
418+ if [ $? -eq 0 ] && [ -n " $version_info " ]; then
419+ local version=$( echo " $version_info " | cut -d' |' -f1)
420+ local platform=$( echo " $version_info " | cut -d' |' -f2)
421+ local download_url=$( echo " $version_info " | cut -d' |' -f3)
422+
423+ echo -e " ${GREEN_COLOR} Latest version: $version ${RES} "
424+ echo -e " ${GREEN_COLOR} Platform: $platform ${RES} "
425+
426+ # Ask user to choose download source
427+ echo -e " ${GREEN_COLOR} Please choose download source:${RES} "
428+ echo -e " ${GREEN_COLOR} 1. Use official mirror (recommended)${RES} "
429+ echo -e " ${GREEN_COLOR} 2. Use GitHub source${RES} "
430+ read -p " Please choose [1-2]: " download_choice
431+
432+ case " ${download_choice:- 1} " in
433+ 1)
434+ # Use official mirror
435+ local filename=$( build_filename " $version " )
436+ local official_url=" https://alistgo.com/download/Alist/v$version /$filename "
437+ echo -e " ${GREEN_COLOR} Using official mirror: $official_url ${RES} "
438+
439+ # Stop Alist service
440+ echo -e " ${GREEN_COLOR} Stopping Alist process${RES} \r\n"
441+ systemctl stop alist
310442
311- # Backup binary
312- cp $INSTALL_PATH /alist /tmp/alist.bak
443+ # Backup binary
444+ cp $INSTALL_PATH /alist /tmp/alist.bak
313445
314- # Download new version
315- echo -e " ${GREEN_COLOR} Downloading Alist...${RES} "
316- if ! download_file " ${GH_DOWNLOAD_URL} /alist-linux-musl-$ARCH .tar.gz" " /tmp/alist.tar.gz" ; then
317- echo -e " ${RED_COLOR} Download failed, update aborted${RES} "
318- echo -e " ${GREEN_COLOR} Restoring previous version...${RES} "
319- mv /tmp/alist.bak $INSTALL_PATH /alist
320- systemctl start alist
321- exit 1
446+ # Download new version
447+ echo -e " ${GREEN_COLOR} Downloading Alist...${RES} "
448+ if ! download_file " $official_url " " /tmp/alist.tar.gz" ; then
449+ echo -e " ${RED_COLOR} Official mirror download failed!${RES} "
450+ echo -e " ${GREEN_COLOR} Restoring previous version...${RES} "
451+ mv /tmp/alist.bak $INSTALL_PATH /alist
452+ systemctl start alist
453+ exit 1
454+ fi
455+ ;;
456+ 2)
457+ # Use GitHub source
458+ echo -e " ${GREEN_COLOR} Using GitHub source${RES} "
459+
460+ # Stop Alist service
461+ echo -e " ${GREEN_COLOR} Stopping Alist process${RES} \r\n"
462+ systemctl stop alist
463+
464+ # Backup binary
465+ cp $INSTALL_PATH /alist /tmp/alist.bak
466+
467+ # Download new version
468+ echo -e " ${GREEN_COLOR} Downloading Alist...${RES} "
469+ local github_filename=$( build_filename " $version " )
470+ if ! download_file " ${GH_DOWNLOAD_URL} /$github_filename " " /tmp/alist.tar.gz" ; then
471+ echo -e " ${RED_COLOR} Download failed, update aborted${RES} "
472+ echo -e " ${GREEN_COLOR} Restoring previous version...${RES} "
473+ mv /tmp/alist.bak $INSTALL_PATH /alist
474+ systemctl start alist
475+ exit 1
476+ fi
477+ ;;
478+ * )
479+ echo -e " ${RED_COLOR} Invalid choice, using default GitHub source${RES} "
480+
481+ # Stop Alist service
482+ echo -e " ${GREEN_COLOR} Stopping Alist process${RES} \r\n"
483+ systemctl stop alist
484+
485+ # Backup binary
486+ cp $INSTALL_PATH /alist /tmp/alist.bak
487+
488+ # Download new version
489+ echo -e " ${GREEN_COLOR} Downloading Alist...${RES} "
490+ local github_filename=$( build_filename " $version " )
491+ if ! download_file " ${GH_DOWNLOAD_URL} /$github_filename " " /tmp/alist.tar.gz" ; then
492+ echo -e " ${RED_COLOR} Download failed, update aborted${RES} "
493+ echo -e " ${GREEN_COLOR} Restoring previous version...${RES} "
494+ mv /tmp/alist.bak $INSTALL_PATH /alist
495+ systemctl start alist
496+ exit 1
497+ fi
498+ ;;
499+ esac
500+ else
501+ echo -e " ${YELLOW_COLOR} Unable to get latest version information, using default GitHub source${RES} "
502+
503+ # Stop Alist service
504+ echo -e " ${GREEN_COLOR} Stopping Alist process${RES} \r\n"
505+ systemctl stop alist
506+
507+ # Backup binary
508+ cp $INSTALL_PATH /alist /tmp/alist.bak
509+
510+ # Download new version
511+ echo -e " ${GREEN_COLOR} Downloading Alist...${RES} "
512+ if ! download_file " ${GH_DOWNLOAD_URL} /alist-linux-musl-$ARCH .tar.gz" " /tmp/alist.tar.gz" ; then
513+ echo -e " ${RED_COLOR} Download failed, update aborted${RES} "
514+ echo -e " ${GREEN_COLOR} Restoring previous version...${RES} "
515+ mv /tmp/alist.bak $INSTALL_PATH /alist
516+ systemctl start alist
517+ exit 1
518+ fi
322519 fi
323520
324521 # Extract files
0 commit comments