首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

离线安装ollama到服务器

  • 25-02-21 19:21
  • 4128
  • 11026
blog.csdn.net

搜了很多教程不满意,弄了半天才弄好,这里记录下,方便以后的人用,那个在线下载太慢,怕不是得下载到明年。

一.从官网下在liunx版的tgz安装包

Releases · ollama/ollama (github.com)

查看自己的服务器信息(参考 https://www.cnblogs.com/Casflawed/p/18525187)

  • x86_64 CPU选择下载ollama-linux-amd64;aarch64|arm64 CPU选择下载ollama-linux-arm64
  1. #查看Linux版本号
  2. cat /proc/version
  3. #查看cpu架构
  4. lscpu

二.利用rz命令上传至服务器端

不知道怎么用看 如何利用Xshell上传文件到服务器-CSDN博客

三.下载官网的安装程序 https://ollama.com/install.sh  起名为insatll.sh

双击打开,我这里用vscode打开

这是官方的

  1. #!/bin/sh
  2. # This script installs Ollama on Linux.
  3. # It detects the current operating system architecture and installs the appropriate version of Ollama.
  4. set -eu
  5. red="$( (/usr/bin/tput bold || :; /usr/bin/tput setaf 1 || :) 2>&-)"
  6. plain="$( (/usr/bin/tput sgr0 || :) 2>&-)"
  7. status() { echo ">>> $*" >&2; }
  8. error() { echo "${red}ERROR:${plain} $*"; exit 1; }
  9. warning() { echo "${red}WARNING:${plain} $*"; }
  10. TEMP_DIR=$(mktemp -d)
  11. cleanup() { rm -rf $TEMP_DIR; }
  12. trap cleanup EXIT
  13. available() { command -v $1 >/dev/null; }
  14. require() {
  15. local MISSING=''
  16. for TOOL in $*; do
  17. if ! available $TOOL; then
  18. MISSING="$MISSING $TOOL"
  19. fi
  20. done
  21. echo $MISSING
  22. }
  23. [ "$(uname -s)" = "Linux" ] || error 'This script is intended to run on Linux only.'
  24. ARCH=$(uname -m)
  25. case "$ARCH" in
  26. x86_64) ARCH="amd64" ;;
  27. aarch64|arm64) ARCH="arm64" ;;
  28. *) error "Unsupported architecture: $ARCH" ;;
  29. esac
  30. IS_WSL2=false
  31. KERN=$(uname -r)
  32. case "$KERN" in
  33. *icrosoft*WSL2 | *icrosoft*wsl2) IS_WSL2=true;;
  34. *icrosoft) error "Microsoft WSL1 is not currently supported. Please use WSL2 with 'wsl --set-version 2'" ;;
  35. *) ;;
  36. esac
  37. VER_PARAM="${OLLAMA_VERSION:+?version=$OLLAMA_VERSION}"
  38. SUDO=
  39. if [ "$(id -u)" -ne 0 ]; then
  40. # Running as root, no need for sudo
  41. if ! available sudo; then
  42. error "This script requires superuser permissions. Please re-run as root."
  43. fi
  44. SUDO="sudo"
  45. fi
  46. NEEDS=$(require curl awk grep sed tee xargs)
  47. if [ -n "$NEEDS" ]; then
  48. status "ERROR: The following tools are required but missing:"
  49. for NEED in $NEEDS; do
  50. echo " - $NEED"
  51. done
  52. exit 1
  53. fi
  54. for BINDIR in /usr/local/bin /usr/bin /bin; do
  55. echo $PATH | grep -q $BINDIR && break || continue
  56. done
  57. OLLAMA_INSTALL_DIR=$(dirname ${BINDIR})
  58. status "Installing ollama to $OLLAMA_INSTALL_DIR"
  59. $SUDO install -o0 -g0 -m755 -d $BINDIR
  60. $SUDO install -o0 -g0 -m755 -d "$OLLAMA_INSTALL_DIR"
  61. if curl -I --silent --fail --location "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" >/dev/null ; then
  62. status "Downloading Linux ${ARCH} bundle"
  63. curl --fail --show-error --location --progress-bar \
  64. "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \
  65. $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR"
  66. BUNDLE=1
  67. if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$BINDIR/ollama" ] ; then
  68. status "Making ollama accessible in the PATH in $BINDIR"
  69. $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama"
  70. fi
  71. else
  72. status "Downloading Linux ${ARCH} CLI"
  73. curl --fail --show-error --location --progress-bar -o "$TEMP_DIR/ollama"\
  74. "https://ollama.com/download/ollama-linux-${ARCH}${VER_PARAM}"
  75. $SUDO install -o0 -g0 -m755 $TEMP_DIR/ollama $OLLAMA_INSTALL_DIR/ollama
  76. BUNDLE=0
  77. if [ "$OLLAMA_INSTALL_DIR/ollama" != "$BINDIR/ollama" ] ; then
  78. status "Making ollama accessible in the PATH in $BINDIR"
  79. $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama"
  80. fi
  81. fi
  82. # Check for NVIDIA JetPack systems with additional downloads
  83. if [ -f /etc/nv_tegra_release ] ; then
  84. if grep R36 /etc/nv_tegra_release > /dev/null ; then
  85. status "Downloading JetPack 6 components"
  86. curl --fail --show-error --location --progress-bar \
  87. "https://ollama.com/download/ollama-linux-${ARCH}-jetpack6.tgz${VER_PARAM}" | \
  88. $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR"
  89. elif grep R35 /etc/nv_tegra_release > /dev/null ; then
  90. status "Downloading JetPack 5 components"
  91. curl --fail --show-error --location --progress-bar \
  92. "https://ollama.com/download/ollama-linux-${ARCH}-jetpack5.tgz${VER_PARAM}" | \
  93. $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR"
  94. else
  95. warning "Unsupported JetPack version detected. GPU may not be supported"
  96. fi
  97. fi
  98. install_success() {
  99. status 'The Ollama API is now available at 127.0.0.1:11434.'
  100. status 'Install complete. Run "ollama" from the command line.'
  101. }
  102. trap install_success EXIT
  103. # Everything from this point onwards is optional.
  104. configure_systemd() {
  105. if ! id ollama >/dev/null 2>&1; then
  106. status "Creating ollama user..."
  107. $SUDO useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
  108. fi
  109. if getent group render >/dev/null 2>&1; then
  110. status "Adding ollama user to render group..."
  111. $SUDO usermod -a -G render ollama
  112. fi
  113. if getent group video >/dev/null 2>&1; then
  114. status "Adding ollama user to video group..."
  115. $SUDO usermod -a -G video ollama
  116. fi
  117. status "Adding current user to ollama group..."
  118. $SUDO usermod -a -G ollama $(whoami)
  119. status "Creating ollama systemd service..."
  120. cat <<EOF | $SUDO tee /etc/systemd/system/ollama.service >/dev/null
  121. [Unit]
  122. Description=Ollama Service
  123. After=network-online.target
  124. [Service]
  125. ExecStart=$BINDIR/ollama serve
  126. User=ollama
  127. Group=ollama
  128. Restart=always
  129. RestartSec=3
  130. Environment="PATH=$PATH"
  131. [Install]
  132. WantedBy=default.target
  133. EOF
  134. SYSTEMCTL_RUNNING="$(systemctl is-system-running || true)"
  135. case $SYSTEMCTL_RUNNING in
  136. running|degraded)
  137. status "Enabling and starting ollama service..."
  138. $SUDO systemctl daemon-reload
  139. $SUDO systemctl enable ollama
  140. start_service() { $SUDO systemctl restart ollama; }
  141. trap start_service EXIT
  142. ;;
  143. *)
  144. warning "systemd is not running"
  145. if [ "$IS_WSL2" = true ]; then
  146. warning "see https://learn.microsoft.com/en-us/windows/wsl/systemd#how-to-enable-systemd to enable it"
  147. fi
  148. ;;
  149. esac
  150. }
  151. if available systemctl; then
  152. configure_systemd
  153. fi
  154. # WSL2 only supports GPUs via nvidia passthrough
  155. # so check for nvidia-smi to determine if GPU is available
  156. if [ "$IS_WSL2" = true ]; then
  157. if available nvidia-smi && [ -n "$(nvidia-smi | grep -o "CUDA Version: [0-9]*\.[0-9]*")" ]; then
  158. status "Nvidia GPU detected."
  159. fi
  160. install_success
  161. exit 0
  162. fi
  163. # Don't attempt to install drivers on Jetson systems
  164. if [ -f /etc/nv_tegra_release ] ; then
  165. status "NVIDIA JetPack ready."
  166. install_success
  167. exit 0
  168. fi
  169. # Install GPU dependencies on Linux
  170. if ! available lspci && ! available lshw; then
  171. warning "Unable to detect NVIDIA/AMD GPU. Install lspci or lshw to automatically detect and install GPU dependencies."
  172. exit 0
  173. fi
  174. check_gpu() {
  175. # Look for devices based on vendor ID for NVIDIA and AMD
  176. case $1 in
  177. lspci)
  178. case $2 in
  179. nvidia) available lspci && lspci -d '10de:' | grep -q 'NVIDIA' || return 1 ;;
  180. amdgpu) available lspci && lspci -d '1002:' | grep -q 'AMD' || return 1 ;;
  181. esac ;;
  182. lshw)
  183. case $2 in
  184. nvidia) available lshw && $SUDO lshw -c display -numeric -disable network | grep -q 'vendor: .* \[10DE\]' || return 1 ;;
  185. amdgpu) available lshw && $SUDO lshw -c display -numeric -disable network | grep -q 'vendor: .* \[1002\]' || return 1 ;;
  186. esac ;;
  187. nvidia-smi) available nvidia-smi || return 1 ;;
  188. esac
  189. }
  190. if check_gpu nvidia-smi; then
  191. status "NVIDIA GPU installed."
  192. exit 0
  193. fi
  194. if ! check_gpu lspci nvidia && ! check_gpu lshw nvidia && ! check_gpu lspci amdgpu && ! check_gpu lshw amdgpu; then
  195. install_success
  196. warning "No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode."
  197. exit 0
  198. fi
  199. if check_gpu lspci amdgpu || check_gpu lshw amdgpu; then
  200. if [ $BUNDLE -ne 0 ]; then
  201. status "Downloading Linux ROCm ${ARCH} bundle"
  202. curl --fail --show-error --location --progress-bar \
  203. "https://ollama.com/download/ollama-linux-${ARCH}-rocm.tgz${VER_PARAM}" | \
  204. $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR"
  205. install_success
  206. status "AMD GPU ready."
  207. exit 0
  208. fi
  209. # Look for pre-existing ROCm v6 before downloading the dependencies
  210. for search in "${HIP_PATH:-''}" "${ROCM_PATH:-''}" "/opt/rocm" "/usr/lib64"; do
  211. if [ -n "${search}" ] && [ -e "${search}/libhipblas.so.2" -o -e "${search}/lib/libhipblas.so.2" ]; then
  212. status "Compatible AMD GPU ROCm library detected at ${search}"
  213. install_success
  214. exit 0
  215. fi
  216. done
  217. status "Downloading AMD GPU dependencies..."
  218. $SUDO rm -rf /usr/share/ollama/lib
  219. $SUDO chmod o+x /usr/share/ollama
  220. $SUDO install -o ollama -g ollama -m 755 -d /usr/share/ollama/lib/rocm
  221. curl --fail --show-error --location --progress-bar "https://ollama.com/download/ollama-linux-amd64-rocm.tgz${VER_PARAM}" \
  222. | $SUDO tar zx --owner ollama --group ollama -C /usr/share/ollama/lib/rocm .
  223. install_success
  224. status "AMD GPU ready."
  225. exit 0
  226. fi
  227. CUDA_REPO_ERR_MSG="NVIDIA GPU detected, but your OS and Architecture are not supported by NVIDIA. Please install the CUDA driver manually https://docs.nvidia.com/cuda/cuda-installation-guide-linux/"
  228. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#rhel-7-centos-7
  229. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#rhel-8-rocky-8
  230. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#rhel-9-rocky-9
  231. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#fedora
  232. install_cuda_driver_yum() {
  233. status 'Installing NVIDIA repository...'
  234. case $PACKAGE_MANAGER in
  235. yum)
  236. $SUDO $PACKAGE_MANAGER -y install yum-utils
  237. if curl -I --silent --fail --location "https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-$1$2.repo" >/dev/null ; then
  238. $SUDO $PACKAGE_MANAGER-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-$1$2.repo
  239. else
  240. error $CUDA_REPO_ERR_MSG
  241. fi
  242. ;;
  243. dnf)
  244. if curl -I --silent --fail --location "https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-$1$2.repo" >/dev/null ; then
  245. $SUDO $PACKAGE_MANAGER config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-$1$2.repo
  246. else
  247. error $CUDA_REPO_ERR_MSG
  248. fi
  249. ;;
  250. esac
  251. case $1 in
  252. rhel)
  253. status 'Installing EPEL repository...'
  254. # EPEL is required for third-party dependencies such as dkms and libvdpau
  255. $SUDO $PACKAGE_MANAGER -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$2.noarch.rpm || true
  256. ;;
  257. esac
  258. status 'Installing CUDA driver...'
  259. if [ "$1" = 'centos' ] || [ "$1$2" = 'rhel7' ]; then
  260. $SUDO $PACKAGE_MANAGER -y install nvidia-driver-latest-dkms
  261. fi
  262. $SUDO $PACKAGE_MANAGER -y install cuda-drivers
  263. }
  264. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu
  265. # ref: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#debian
  266. install_cuda_driver_apt() {
  267. status 'Installing NVIDIA repository...'
  268. if curl -I --silent --fail --location "https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-keyring_1.1-1_all.deb" >/dev/null ; then
  269. curl -fsSL -o $TEMP_DIR/cuda-keyring.deb https://developer.download.nvidia.com/compute/cuda/repos/$1$2/$(uname -m | sed -e 's/aarch64/sbsa/')/cuda-keyring_1.1-1_all.deb
  270. else
  271. error $CUDA_REPO_ERR_MSG
  272. fi
  273. case $1 in
  274. debian)
  275. status 'Enabling contrib sources...'
  276. $SUDO sed 's/main/contrib/' < /etc/apt/sources.list | $SUDO tee /etc/apt/sources.list.d/contrib.list > /dev/null
  277. if [ -f "/etc/apt/sources.list.d/debian.sources" ]; then
  278. $SUDO sed 's/main/contrib/' < /etc/apt/sources.list.d/debian.sources | $SUDO tee /etc/apt/sources.list.d/contrib.sources > /dev/null
  279. fi
  280. ;;
  281. esac
  282. status 'Installing CUDA driver...'
  283. $SUDO dpkg -i $TEMP_DIR/cuda-keyring.deb
  284. $SUDO apt-get update
  285. [ -n "$SUDO" ] && SUDO_E="$SUDO -E" || SUDO_E=
  286. DEBIAN_FRONTEND=noninteractive $SUDO_E apt-get -y install cuda-drivers -q
  287. }
  288. if [ ! -f "/etc/os-release" ]; then
  289. error "Unknown distribution. Skipping CUDA installation."
  290. fi
  291. . /etc/os-release
  292. OS_NAME=$ID
  293. OS_VERSION=$VERSION_ID
  294. PACKAGE_MANAGER=
  295. for PACKAGE_MANAGER in dnf yum apt-get; do
  296. if available $PACKAGE_MANAGER; then
  297. break
  298. fi
  299. done
  300. if [ -z "$PACKAGE_MANAGER" ]; then
  301. error "Unknown package manager. Skipping CUDA installation."
  302. fi
  303. if ! check_gpu nvidia-smi || [ -z "$(nvidia-smi | grep -o "CUDA Version: [0-9]*\.[0-9]*")" ]; then
  304. case $OS_NAME in
  305. centos|rhel) install_cuda_driver_yum 'rhel' $(echo $OS_VERSION | cut -d '.' -f 1) ;;
  306. rocky) install_cuda_driver_yum 'rhel' $(echo $OS_VERSION | cut -c1) ;;
  307. fedora) [ $OS_VERSION -lt '39' ] && install_cuda_driver_yum $OS_NAME $OS_VERSION || install_cuda_driver_yum $OS_NAME '39';;
  308. amzn) install_cuda_driver_yum 'fedora' '37' ;;
  309. debian) install_cuda_driver_apt $OS_NAME $OS_VERSION ;;
  310. ubuntu) install_cuda_driver_apt $OS_NAME $(echo $OS_VERSION | sed 's/\.//') ;;
  311. *) exit ;;
  312. esac
  313. fi
  314. if ! lsmod | grep -q nvidia || ! lsmod | grep -q nvidia_uvm; then
  315. KERNEL_RELEASE="$(uname -r)"
  316. case $OS_NAME in
  317. rocky) $SUDO $PACKAGE_MANAGER -y install kernel-devel kernel-headers ;;
  318. centos|rhel|amzn) $SUDO $PACKAGE_MANAGER -y install kernel-devel-$KERNEL_RELEASE kernel-headers-$KERNEL_RELEASE ;;
  319. fedora) $SUDO $PACKAGE_MANAGER -y install kernel-devel-$KERNEL_RELEASE ;;
  320. debian|ubuntu) $SUDO apt-get -y install linux-headers-$KERNEL_RELEASE ;;
  321. *) exit ;;
  322. esac
  323. NVIDIA_CUDA_VERSION=$($SUDO dkms status | awk -F: '/added/ { print $1 }')
  324. if [ -n "$NVIDIA_CUDA_VERSION" ]; then
  325. $SUDO dkms install $NVIDIA_CUDA_VERSION
  326. fi
  327. if lsmod | grep -q nouveau; then
  328. status 'Reboot to complete NVIDIA CUDA driver install.'
  329. exit 0
  330. fi
  331. $SUDO modprobe nvidia
  332. $SUDO modprobe nvidia_uvm
  333. fi
  334. # make sure the NVIDIA modules are loaded on boot with nvidia-persistenced
  335. if available nvidia-persistenced; then
  336. $SUDO touch /etc/modules-load.d/nvidia.conf
  337. MODULES="nvidia nvidia-uvm"
  338. for MODULE in $MODULES; do
  339. if ! grep -qxF "$MODULE" /etc/modules-load.d/nvidia.conf; then
  340. echo "$MODULE" | $SUDO tee -a /etc/modules-load.d/nvidia.conf > /dev/null
  341. fi
  342. done
  343. fi
  344. status "NVIDIA GPU ready."
  345. install_success

然后找到这个代码片段

  1. if curl -I --silent --fail --location "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" >/dev/null ; then
  2. status "Downloading Linux ${ARCH} bundle"
  3. curl --fail --show-error --location --progress-bar \
  4. "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \
  5. $SUDO tar -xzf - -C "$OLLAMA_INSTALL_DIR"
  6. BUNDLE=1
  7. if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$BINDIR/ollama" ] ; then
  8. status "Making ollama accessible in the PATH in $BINDIR"
  9. $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama"
  10. fi
  11. else
  12. status "Downloading Linux ${ARCH} CLI"
  13. curl --fail --show-error --location --progress-bar -o "$TEMP_DIR/ollama"\
  14. "https://ollama.com/download/ollama-linux-${ARCH}${VER_PARAM}"
  15. $SUDO install -o0 -g0 -m755 $TEMP_DIR/ollama $OLLAMA_INSTALL_DIR/ollama
  16. BUNDLE=0
  17. if [ "$OLLAMA_INSTALL_DIR/ollama" != "$BINDIR/ollama" ] ; then
  18. status "Making ollama accessible in the PATH in $BINDIR"
  19. $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama"
  20. fi
  21. fi

可以看到这里的路径是官网的,我们要搞成自己的

  1. status "Installing ollama to $OLLAMA_INSTALL_DIR"
  2. $SUDO install -o0 -g0 -m755 -d $BINDIR
  3. $SUDO install -o0 -g0 -m755 -d "$OLLAMA_INSTALL_DIR"
  4. status "Downloading Linux ${ARCH} bundle"
  5. # curl --fail --show-error --location --progress-bar \
  6. # "https://ollama.com/download/ollama-linux-${ARCH}.tgz${VER_PARAM}" | \
  7. $SUDO tar -xzf ./Ollama.tgz -C "$OLLAMA_INSTALL_DIR"
  8. BUNDLE=1
  9. if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$BINDIR/ollama" ] ; then
  10. status "Making ollama accessible in the PATH in $BINDIR"
  11. $SUDO ln -sf "$OLLAMA_INSTALL_DIR/ollama" "$BINDIR/ollama"
  12. fi

注意文件名,改成自己的,这个例子中是/home/Ollama.tgz, 依据实际情况来改(参考自http://iyenn.com/rec/1674832.html)

把该文件用rz指令上传至服务器。


四.安装

1.解决报错

报错:

  1. install.sh: line 4: $'\r': command not found
  2. : invalid option 5: set: -
  3. set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

原因:

出现这个错误是因为你的脚本文件在Windows环境下被编辑或保存过,导致它包含了Windows风格的换行符(CRLF),而Linux系统下的脚本通常使用UNIX风格的换行符(LF)。此外,set: invalid option 5的错误提示表明脚本中可能存在语法错误。

解决:使用dos2unix工具将脚本文件的换行符从CRLF转换为LF

使用该命令下载必要的包

sudo yum install dos2unix

转换

dos2unix install.sh

然后在install.sh文件目录下执行

sh install.sh

等待安装即可


最终安装成功

注:本文转载自blog.csdn.net的AlgorithmAce的文章"https://blog.csdn.net/2301_80224944/article/details/144273295"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

121
服务器
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top