Manjaro/Archlinux 使用PKGBUILD 安装指定版本的软件
发布于 2024-03-26
使用 Manjaro
发行版有好长一段时间了。
期间也修改过 aur
库中的 PKGBUILD
文件来安装指定版本的软件。
最近 phpstorm
启动报错,便想用重装的方式简单粗暴的来解决。
因为要安装旧版本的(新版本要登录账号,嫌麻烦),所以还是要借助 aur
中的 PKGBUILD
来实现安装。
操作步骤倒是很简单:
- 从
AUR
库中下载 phpstorm 的PKGBUILD
源文件 - 从
JetBrain
官网下载指定版本的 phpstorm 安装包 - 将
PKGBUILD
和 phpstorm 安装包放在同一个目录下 - 对
PKGBUILD
文件做如下简单修改pkgver
变量修改为本地 phpstorm 安装包的版本号source
变量修改为本地的 phpstorm 安装包名称b2sums
变量修改为SKIP
(注意大写)
- 执行
makepkg -si
命令构建和安装即可
顺便借这个机会简单学习下 PKGBUILD
文件的语法。
直接以注释的方式贴出来:
# 语法跟shell几乎完全一致,只不过预定义了一些变量的名称和含义 # 如果需要自定义一些变量,建议使用下划线_开头,以避免跟预定义变量冲突 # # 开头表示注释 # 设置软件包的基本信息 pkgbase=phpstorm # 定义软件包的基本名称 pkgname=(phpstorm phpstorm-jre) # 定义软件包的名称,包括 phpstorm 和 phpstorm-jre pkgver=2021.1.4 # 定义软件包的版本号 pkgrel=1 # 定义软件包的发布版本号 pkgdesc='Lightweight and Smart PHP IDE' # 定义软件包的描述信息 arch=('x86_64' 'i686') # 定义软件包支持的架构 license=('custom:jetbrains') # 定义软件包的许可证类型 url='https://www.jetbrains.com/phpstorm/' # 定义软件包的官方网站 URL depends=('glib2' 'python') # 定义软件包的依赖项 options=('!strip') # 定义软件包的编译选项 source=("PhpStorm-${pkgver%b*}.tar.gz") # 定义软件包的源文件 # 源文件的校验和,这里使用了 SKIP,表示校验和不可用或不适用 b2sums=('SKIP') # 定义打包 phpstorm 软件包的操作 package_phpstorm() { # 定义 phpstorm 软件包的可选依赖项 optdepends=('phpstorm-jre: JetBrains custom Java Runtime (Recommended)' 'java-runtime: JRE - Required if phpstorm-jre is not installed' 'gnome-keyring: save login/deployment credentials safely' 'java-openjfx: rendering Markdown files') # 从源目录中复制 PhpStorm 到目标安装目录 # _buildver 是自定义的变量, 值是执行shell命令从文件名中提取的 PhpStorm 版本号 _buildver="$(ls | grep -Eo 'PhpStorm-[[:digit:]]+\.[[:digit:]]{2,5}\.[[:digit:]]+' | sort -r | head -1 | sed 's#PhpStorm-##')" # install 命令是 gnu coreutils 包中提供的, 因为没用过这个命令, 最开始我还以为时 PKGBUILD 预定义的方法 install -dm755 "${pkgdir}"/opt/ install -dm755 "${pkgdir}"/usr/bin/ install -dm755 "${pkgdir}"/usr/share/applications/ install -dm755 "${pkgdir}"/usr/share/pixmaps/ cp -a "${srcdir}"/PhpStorm-${_buildver:?_buildver unset}/ "${pkgdir}"/opt/${pkgbase} rm -rf "${pkgdir}"/opt/${pkgbase}/jbr ln -s /opt/${pkgbase}/bin/${pkgbase}.sh "${pkgdir}"/usr/bin/${pkgbase} # 将 svg 图标安装到目标目录 install -D -m 644 "${pkgdir}"/opt/${pkgbase}/bin/${pkgbase}.svg "${pkgdir}"/usr/share/pixmaps/${pkgbase}.svg } # 定义打包 phpstorm-jre 软件包的操作 package_phpstorm-jre() { pkgdesc='JBR (JetBrains Runtime) for PhpStorm - a patched JRE' # 定义 phpstorm-jre 软件包的描述信息 url='https://github.com/JetBrains/JetBrainsRuntime' # 定义 phpstorm-jre 软件包的官方网站 URL # 从源目录中复制 JBR 到目标安装目录 _buildver="$(ls | grep -Eo 'PhpStorm-[[:digit:]]+\.[[:digit:]]{2,5}\.[[:digit:]]+' | sort -r | head -1 | sed 's#PhpStorm-##')" install -d -m 755 "${pkgdir}"/opt/${pkgbase} cp -a "${srcdir}"/PhpStorm-${_buildver:?_buildver unset}/jbr "${pkgdir}"/opt/${pkgbase} }
一个很好的入门参考:
更深入的学习推荐查看 manpage
:
man PKGBUILD
man makepkg
man install