Ubuntu Post-Install高级技巧:如何添加自定义应用安装函数
Ubuntu Post-Install高级技巧如何添加自定义应用安装函数【免费下载链接】ubuntu-post-installA set of post-installation shell scripts for Ubuntu项目地址: https://gitcode.com/gh_mirrors/ub/ubuntu-post-install想要个性化你的Ubuntu系统配置体验吗通过ubuntu-post-install脚本集你可以轻松扩展功能添加自定义应用安装函数这个强大的Ubuntu后安装脚本工具不仅提供了丰富的默认功能还允许你根据自己的需求定制安装选项。本文将为你详细介绍如何添加自定义应用安装函数让你的Ubuntu系统配置更加得心应手。为什么需要自定义应用安装函数ubuntu-post-install脚本是一个模块化的系统配置工具它已经包含了常见的应用安装功能。但每个用户的需求都是独特的你可能需要安装特定版本的开发工具你可能需要配置个性化的桌面环境你可能需要安装公司内部使用的专有软件你可能想要简化重复的系统配置流程通过添加自定义函数你可以将这些重复性的配置任务自动化大大提高工作效率理解项目结构首先让我们了解一下ubuntu-post-install的项目结构ubuntu-post-install/ ├── ubuntu-post-install.sh # 主脚本文件 ├── functions/ # 功能函数目录 │ ├── install_thirdparty # 第三方应用安装主函数 │ ├── install_functions # 通用安装函数库 │ └── apps/ # 具体应用安装函数 │ ├── chrome # Chrome浏览器安装 │ ├── dropbox # Dropbox安装 │ └── ... └── data/ # 配置文件和数据列表这种模块化设计使得添加新功能变得非常简单创建自定义应用安装函数的完整指南第一步在apps目录中创建新函数文件假设我们要添加Visual Studio Code的安装函数首先在functions/apps/目录下创建新文件# 创建新的应用安装函数文件 cd ubuntu-post-install touch functions/apps/vscode chmod x functions/apps/vscode第二步编写应用安装函数打开functions/apps/vscode文件添加以下内容#!/bin/bash # 安装Visual Studio Code function install_vscode { echo_message header Starting install_vscode function # 检查是否已安装 if [ $(check_package_installed code) ! 0 ]; then echo_message info Visual Studio Code is not installed. Installing... if (whiptail \ --title Install Visual Studio Code \ --yesno Proceed with installation of Visual Studio Code? 8 56) then # 添加微软GPG密钥 echo_message info Adding Microsoft GPG key... wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor packages.microsoft.gpg superuser_do install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/ # 添加VSCode仓库 echo_message info Adding Visual Studio Code repository... superuser_do sh -c echo \deb [archamd64,arm64,armhf] https://packages.microsoft.com/repos/code stable main\ /etc/apt/sources.list.d/vscode.list # 更新软件包列表并安装 echo_message info Updating package list... superuser_do apt update echo_message info Installing Visual Studio Code... superuser_do apt install -y code # 清理临时文件 rm -f packages.microsoft.gpg echo_message success Installation of Visual Studio Code complete! whiptail --title Finished --msgbox Visual Studio Code installation complete! 8 56 else echo_message info Installation of Visual Studio Code cancelled. fi else echo_message info Visual Studio Code is already installed. whiptail --title Installed --msgbox Visual Studio Code is already installed. 8 56 fi # 返回第三方应用安装菜单 install_thirdparty }第三步更新install_thirdparty函数编辑functions/install_thirdparty文件在菜单中添加新选项# 在install_thirdparty函数的菜单中添加新选项 install_vscode Visual Studio Code \完整菜单部分应该看起来像这样THIRDPARTY$(eval resize whiptail \ --notags \ --title Install $NAME \ --menu \nWhat ${NAME,,} would you like to install? \ --ok-button Install \ --cancel-button Go Back \ $LINES $COLUMNS $(( $LINES - 12 )) \ install_chrome Google Chrome \ install_dropbox Dropbox \ install_oracle_java Oracle Java \ install_rvm Ruby Version Manager (RVM) \ install_sublime_text Sublime Text 3 \ install_vscode Visual Studio Code \ 31 12 23)高级技巧创建更复杂的安装函数支持多个版本选择让我们创建一个支持多个版本选择的Docker安装函数#!/bin/bash # 安装Docker function install_docker { echo_message header Starting install_docker function VERSION$(eval resize whiptail \ --title Install Docker \ --radiolist Select Docker version to install: \ --ok-button Install \ --cancel-button Go Back \ $LINES $COLUMNS $(( $LINES - 12 )) \ latest Latest stable version ON \ docker-ce Community Edition OFF \ docker-ee Enterprise Edition OFF \ 31 12 23) if [ $? 0 ]; then case ${VERSION} in latest|docker-ce|docker-ee) install_docker_version $VERSION ;; *) install_thirdparty ;; esac else install_thirdparty fi } function install_docker_version { local version$1 echo_message info Installing Docker ${version}... # 卸载旧版本 superuser_do apt remove -y docker docker-engine docker.io containerd runc # 安装依赖 superuser_do apt update superuser_do apt install -y apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | superuser_do gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | superuser_do tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker superuser_do apt update superuser_do apt install -y docker-ce docker-ce-cli containerd.io # 添加当前用户到docker组 superuser_do usermod -aG docker $USER echo_message success Docker ${version} installation complete! echo_message warning You need to log out and log back in for group changes to take effect. whiptail --title Finished --msgbox Docker ${version} installation complete!\n\nPlease log out and log back in for group changes to take effect. 10 60 install_thirdparty }使用现有的安装函数ubuntu-post-install提供了几个实用的安装函数你可以在自定义函数中重用它们install_package()- 安装单个软件包install_remote_package()- 安装远程.deb包install_from_list()- 从列表安装多个软件包install_flatpak_package()- 安装Flatpak应用install_snap_package()- 安装Snap应用例如使用install_remote_package()安装Telegram#!/bin/bash # 安装Telegram Desktop function install_telegram { echo_message header Starting install_telegram function # 使用现有的远程包安装函数 install_remote_package Telegram Desktop tsetup https://telegram.org/dl/desktop/linux install_thirdparty }最佳实践和调试技巧1. 保持函数简洁每个函数应该只负责一个特定的任务。如果安装过程很复杂可以拆分成多个子函数。2. 添加适当的错误处理function install_custom_app { echo_message header Starting install_custom_app function # 检查前置条件 if ! command -v curl /dev/null; then echo_message error curl is required but not installed! whiptail --title Error --msgbox curl is required to install this application. 8 56 return 1 fi # 主安装逻辑 # ... # 验证安装是否成功 if [ $? -eq 0 ]; then echo_message success Installation completed successfully! else echo_message error Installation failed! fi }3. 使用项目提供的工具函数充分利用项目中已有的工具函数echo_message- 显示格式化的消息superuser_do- 以管理员权限执行命令check_package_installed- 检查软件包是否已安装4. 测试你的函数在添加新函数后一定要进行测试# 测试单个函数 ./ubuntu-post-install.sh # 或者直接运行函数 source functions/install_thirdparty source functions/apps/vscode install_vscode扩展思路创建你自己的配置模块除了添加应用安装函数你还可以创建完整的配置模块开发环境配置- 安装Python、Node.js、Java等开发工具多媒体工作站- 安装音频/视频编辑软件游戏环境- 安装Steam、游戏依赖库办公套件- 安装WPS、OnlyOffice等系统优化- 添加性能调优脚本总结通过为ubuntu-post-install脚本添加自定义应用安装函数你可以✅自动化重复的安装任务- 节省时间和精力 ✅创建个性化的系统配置- 满足特定需求 ✅分享配置给团队- 统一开发环境 ✅快速恢复工作环境- 重装系统后一键配置记住ubuntu-post-install的强大之处在于它的模块化设计。无论是简单的软件包安装还是复杂的系统配置你都可以通过创建自定义函数来扩展其功能。现在就开始定制你的Ubuntu后安装脚本吧通过添加自定义应用安装函数让系统配置变得更加高效和个性化。✨小贴士在开始之前建议先熟悉项目中的现有函数结构这样可以更好地理解如何编写兼容的自定义函数。祝你配置愉快【免费下载链接】ubuntu-post-installA set of post-installation shell scripts for Ubuntu项目地址: https://gitcode.com/gh_mirrors/ub/ubuntu-post-install创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Battery Toolkit:Apple Silicon Mac 电源管理的技术实现与架构解析

Battery Toolkit:Apple Silicon Mac 电源管理的技术实现与架构解析

Battery Toolkit:Apple Silicon Mac 电源管理的技术实现与架构解析 【免费下载链接】Battery-Toolkit Control the platform power state of your Apple Silicon Mac. 项目地址: https://gitcode.com/gh_mirrors/ba/Battery-Toolkit Battery Toolkit 是一款专…

2026/10/10 20:44:30 阅读更多 →
鸿蒙 PC Markdown 编辑器命令面板:把桌面高频操作收束到一个入口

鸿蒙 PC Markdown 编辑器命令面板:把桌面高频操作收束到一个入口

鸿蒙 PC Markdown 编辑器命令面板:把桌面高频操作收束到一个入口 在桌面编辑器里,命令面板不是一个“搜索按钮集合”的弹窗。它真正解决的是功能增长之后的入口失控:菜单越来越深、工具栏越来越宽、快捷键越来越难记,而用户的注意…

2026/10/2 21:18:53 阅读更多 →
TwitchDropsMiner完整指南:零带宽自动获取游戏掉落奖励

TwitchDropsMiner完整指南:零带宽自动获取游戏掉落奖励

TwitchDropsMiner完整指南:零带宽自动获取游戏掉落奖励 【免费下载链接】TwitchDropsMiner An app that allows you to AFK mine timed Twitch drops, with automatic drop claiming and channel switching. 项目地址: https://gitcode.com/GitHub_Trending/tw/Tw…

2026/10/11 1:30:20 阅读更多 →

最新新闻

artcraft:一种可控的创意生产方法论

artcraft:一种可控的创意生产方法论

1. 项目概述:什么是“artcraft”?它不是艺术展,也不是手作市集,而是一套可落地的创意生产方法论“artcraft”这个词最近在设计圈、独立开发者社区和高校创意工坊里频繁出现,但它既不是某个新发布的软件,也不…

2026/10/11 7:06:37 阅读更多 →
Docker一键部署nao分析智能体:自托管、数据不出域的完整指南

Docker一键部署nao分析智能体:自托管、数据不出域的完整指南

【免费下载链接】nao 👾 nao is an open source analytics agent. (1) Create context with nao-core cli, (2) deploy nao chat interface for everyone 项目地址: https://gitcode.com/gh_mirrors/nao4/nao 点击查看 免费下载 nao 是一个开源分析智能…

2026/10/11 7:06:37 阅读更多 →
AI Agent遥测数据安全吗?agent-beacon隐私模式、脱敏与MDM批量部署完整指南

AI Agent遥测数据安全吗?agent-beacon隐私模式、脱敏与MDM批量部署完整指南

【免费下载链接】agent-beacon The cross-harness, self-improving memory layer for AI agents. 项目地址: https://gitcode.com/gh_mirrors/ag/agent-beacon 点击查看 免费下载 AI Agent 遥测数据安全吗? 如果你正评估 agent-beacon(AI Ag…

2026/10/11 7:06:37 阅读更多 →
Ionic Checkbox 组件详解:从基础用法到实战技巧

Ionic Checkbox 组件详解:从基础用法到实战技巧

1. 引言在移动端应用开发中,复选框(Checkbox)是最常用的表单控件之一。Ionic 框架提供了功能强大的 Checkbox 组件,帮助开发者快速构建美观且交互流畅的复选功能。本文将深入讲解 Ionic Checkbox 的用法,从基础语法到高…

2026/10/11 7:06:37 阅读更多 →
LangGraph == 图的状态(State)管理 (上)

LangGraph == 图的状态(State)管理 (上)

3.1. 状态定义状态的定义实际上是在声明状态的Schema,后者是状态字段的完整描述。官方推荐了三种定义Schema的方式:TypedDict、dataclass、Pydantic3.1.1. TypedDictfrom typing import TypedDict,Annotated from operator import add from langgraph.g…

2026/10/11 7:06:37 阅读更多 →
Cursor 高级指南(七):CLI 安装、非交互、Worktree 与 ACP 实战配置

Cursor 高级指南(七):CLI 安装、非交互、Worktree 与 ACP 实战配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 7:05:37 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →