我想在Arch Linux上同时存在不同版本的软件包

首先

這篇文章記錄了在 Arch Linux 中讓不同版本的軟體包共存的步驟。
由於原始作業的相關性,基本上我們使用根用戶進行操作。

背景和所做的事情

    • archlinuxを使う中で古いバージョンのパッケージを使う必要が出てきた(nodejs)

 

    • それにあたって関連パッケージもバージョンを落とす必要が出た(npm, icu)

 

    しかし最新版がないと動かないモジュールもあった(→ icuは最新版も必要)

本文介绍了三个包,即nodejs、npm和icu。它们的操作如下所示。

icuの複数バージョンを同居させた ←タイトルの件
nodejs, npmは古いバージョンにした

安装模块以降低版本

据说在Arch Linux中有一种思想,即“基本上使用最新版本的软件包”,因此无法通过pacman等工具降级软件版本。
因此,需要通过git安装downgrade模块。

安装Git

pacman -S --noconfirm git

降级的安装

# 作業用ディレクトリの作成
mkdir /work
chmod 777 /work

# 後続のmakepkgコマンドがrootで実行できないため、一般ユーザーにスイッチ
su - arch
# git clone
cd /work
git clone https://aur.archlinux.org/downgrade.git

# downgradeパッケージのインストール
cd /work/downgrade
makepkg -si
(ユーザーのパスワードを入力したり、Yの入力をする)

# ルートユーザーに戻る
exit

降级和多个版本的共存

安装最新版本的nodejs和npm。

# nodejsのインストール
pacman -S --noconfirm nodejs npm

将Node.js和npm降级。

使用刚刚安装的downgrade来降低软件包的版本。

# nodejsをダウングレード
downgrade nodejs
16.6.1
(Proceed with installation? [Y/n] には Yとしておき、
  add nodejs to IgnorePkg? [y/N] にも yとしておく)

# npmをダウングレード(nodejs16.6.1に対応するのが7.20.3だった)
downgrade npm
7.20.3
(Proceed with installation? [Y/n] には Yとしておき、
  add nodejs to IgnorePkg? [y/N] にも yとしておく)

# nodeのバージョン確認を行うと、libicui18n.so.69 がないというエラーが出る
node --version
node: error while loading shared libraries: libicui18n.so.69: cannot open shared object file: No such file or directory

降级libicui。

最终我会安装最新版本,但我想先使用降级工具将其还原到需要的旧版本。

# icuをダウングレード
downgrade icu
69.1
(Proceed with installation? [Y/n] には Yとしておき、
  add nodejs to IgnorePkg? [y/N] には Nとしておく)

将旧版本的文件备份。

因为这样会被版本更新覆盖,所以需要创建一个存放旧包的地方并将其移动。

# 古いパッケージが入ったことを確認し、old用のフォルダへ移動する
## 69.1のバージョンが入っていることを確認する
ls -l /usr/lib/libicu*

# 古いバージョンを退避するディレクトリ作成
mkdir -p /usr/lib_old

# libicuから始まるパッケージを退避する
ls -l /usr/lib/libicu* | grep '^-' | while read line; do
   org_path=$(echo $line | awk '{print $9}')
   file_name=$(echo $org_path | awk -F '/' '{print $NF}')
   cp -p $org_path /usr/lib_old/$file_name
   echo "copy $file_name"
done

# 退避したファイルの確認
ls -l /usr/lib_old

将libicui更新为最新版本

# ダウングレード&ignoreの設定の解除
# downgradeした際に、icuが自動更新をしない設定になっている場合は解除する
grep 'IgnorePkg =' /etc/pacman.conf

# pacman.confの変更
vim /etc/pacman.conf
>>> vim変更内容 >>>
# IgnorePkg の設定からicuを削除(ある場合)
<修正後サンプル>
IgnorePkg = nodejs npm
<<< vim変更内容 <<<

# icuを最新化
pacman -Syu --noconfirm icu

将链接放在已回退的旧版icu文件中

根据对Arch Linux库的使用,如果在/usr/lib/目录下链接存在,则可以运行,因此我将向先前备份的文件创建一个链接。

# 現在のlibicuのリンク確認
ls -l /usr/lib/libicu*

# 退避した古いicuファイル
ls -l /usr/lib_old/libicu*

# リンクを貼る
ls -l /usr/lib_old/libicu* | grep '^-' | while read line; do
   old_path=$(echo $line | awk '{print $9}')
   file_name=$(echo $old_path | awk -F '/' '{print $NF}')
   ln -s $old_path /usr/lib/$file_name
   echo "create link to $file_name"
done

# 貼ったリンクの確認
ls -l /usr/lib/libicu*

# パスの読み込み直し
ldconfig

确认能够执行node命令。

node --version

對於這篇文章的方法是否正確,我不清楚,但既然目標已經達成,就算不錯了。

以上

相关文章

    NASNEを自作してみた
广告
将在 10 秒后关闭
bannerAds