리눅스/Arch or Manjaro

아치 리눅스(Arch Linux) AUR(Arch User Repository) 패키지 설치법 03 - AUR Helper(yay, paru 등) 없이 AUR 패키지 설치 및 업그레이드(예 - 구글 크롬)

씨실과 날실 2021. 8. 31. 09:00

안녕하세요. 씨실과 날실입니다.

지난 시간에 AUR Helper 프로그램을 이용해 AUR 패키지를 설치하고 업그레이드한ㄴ 방법을 구글 크롬을 예로 알아보았습니다.

 

그러나 개인적으로 이 AUR Helper 프로그램을 이용해 패키지를 관리하는 것을 그다지 선호하지 않는 편입니다.

분명 AUR Helper 프로그램들은 패키지 관리 측면에서 굉장히 많은 편리를 가져다 주지만 몇가지 문제가 있습니다.

먼저 아치 리눅스 개발진에서 공식적으로 유지보수를 지원하는 것이 아니라 자원봉사자들 기여의 산물이다 보니 만약 자기가 사용하는 AUR Helper의 유지보수가 중단되면 다른 AUR Helper 프로그램을 찾아보아야 합니다. 실제로 우리는 yaourt라는 실례를 접했습니다.

게다가 사람이 만드는 프로그램이다보니 얼마든지 버그가 발생할 수 있고 이로 인해 오류가 발생할 수 있습니다.

따라서 평소에는 AUR Helper를 사용하더라도 적어도 수동으로 설치, 업그레이드하는 방법은 알아둘 필요가 있습니다.

 

시스템 패키지 업데이트

[study@study-virtualbox ~]$ sudo pacman -Syu
[sudo] password for study: 
:: Synchronizing package databases...
 core                  135.9 KiB   233 KiB/s 00:01 [######################] 100%
 extra                1569.8 KiB  7.94 MiB/s 00:00 [######################] 100%
 community               5.6 MiB  9.08 MiB/s 00:01 [######################] 100%
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...

Packages (2) automake-1.16.4-1  gtk3-1:3.24.30-2

Total Download Size:    8.26 MiB
Total Installed Size:  50.16 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n] 
:: Retrieving packages...
 automake-1.16.4-...   611.7 KiB  8.18 MiB/s 00:00 [######################] 100%
 gtk3-1:3.24.30-2...     7.7 MiB  10.9 MiB/s 00:01 [######################] 100%
 Total (2/2)             8.3 MiB  10.4 MiB/s 00:01 [######################] 100%
(2/2) checking keys in keyring                     [######################] 100%
(2/2) checking package integrity                   [######################] 100%
(2/2) loading package files                        [######################] 100%
(2/2) checking for file conflicts                  [######################] 100%
(2/2) checking available disk space                [######################] 100%
:: Processing package changes...
(1/2) upgrading automake                           [######################] 100%
(2/2) upgrading gtk3                               [######################] 100%
:: Running post-transaction hooks...
(1/4) Arming ConditionNeedsUpdate...
(2/4) Compiling GSettings XML schema files...
(3/4) Probing GTK3 input method modules...
(4/4) Updating the info directory file...
[study@study-virtualbox ~]$

패키지 설치 전에(그것이 일반 저장소에서 구할 수 있는 패키지이든, AUR 패키지이든 간에) 시스템 패키지 전체 업그레이드 작업을 수행해주는 것이 좋습니다.

 

사전 필수 패키지 설치

[study@study-virtualbox ~]$ sudo pacman --needed -S base-devel git
warning: autoconf-2.71-1 is up to date -- skipping
warning: automake-1.16.4-1 is up to date -- skipping
warning: binutils-2.36.1-3 is up to date -- skipping
warning: bison-3.7.6-1 is up to date -- skipping
warning: fakeroot-1.25.3-2 is up to date -- skipping
warning: file-5.40-5 is up to date -- skipping
warning: findutils-4.8.0-1 is up to date -- skipping
warning: flex-2.6.4-3 is up to date -- skipping
warning: gawk-5.1.0-1 is up to date -- skipping
warning: gcc-11.1.0-1 is up to date -- skipping
warning: gettext-0.21-1 is up to date -- skipping
warning: grep-3.6-1 is up to date -- skipping
warning: groff-1.22.4-6 is up to date -- skipping
warning: gzip-1.10-3 is up to date -- skipping
warning: libtool-2.4.6+42+gb88cebd5-16 is up to date -- skipping
warning: m4-1.4.19-1 is up to date -- skipping
warning: make-4.3-3 is up to date -- skipping
warning: pacman-6.0.0-5 is up to date -- skipping
warning: patch-2.7.6-8 is up to date -- skipping
warning: pkgconf-1.7.3-1 is up to date -- skipping
warning: sed-4.8-1 is up to date -- skipping
warning: sudo-1.9.7.p2-1 is up to date -- skipping
warning: texinfo-6.8-1 is up to date -- skipping
warning: which-2.21-5 is up to date -- skipping
warning: git-2.32.0-1 is up to date -- skipping
 there is nothing to do
[study@study-virtualbox ~]$

AUR 패키지를 수동으로 설치하기 위해서는 개발 관련 기본 패키지들(base-devel 그룹)과 분산 버전 관리도구인 git을 설치해주어야 합니다. base-devel 그룹 패키지들은 다운받은 스냅샷의 소스들을 토대로 컴파일, 빌드하는데 필요하고 git은 원본 소스의 스냅샷을 복제(clone)하는데 필요하기 때문입니다.

 

제 아치 리눅스 설치 연재를 그대로 따라오신 분들은 적어도 base-devel 그룹 패키지는 이미 설치되어 있을 것이고 더 나아가서 git도 설치되어 있는 분들도 있을 것입니다.

 

AUR 패키지 관리 디렉터리 생성 및 진입

[study@study-virtualbox ~]$ mkdir aur
[study@study-virtualbox ~]$ cd aur
[study@study-virtualbox aur]$

AUR 패키지를 관리할 디렉터리를 생성해줍니다.

일반적으로 sudo 권한을 가지는 일반 계정의 홈 디렉터리 안에 만들어 주는 것이 관리상 편합니다.

 

설치 패키지 검색

위 링크의 아치리눅스 AUR 홈페이지에 접속합니다.

패키지 검색 막대에서 자신이 설치하고자 하는 패키지 이름을 입력해 검색해봅니다.

예를 들어 이 글에서 설치하고자 하는 구글 크롬 브라우저의 경우 google-chrome이 패키지 이름입니다.

그러면 아래 링크 페이지가 나타나게 됩니다.

 

해당 페이지에 들어가보면 아래와 같은 AUR 패키지들을 확인할 수 있습니다.

google-chrome 키워드로 검색 시 나타나는 패키지 목록

google-chrome
google-chrome-beta
google-chrome-dev

chromedriver
chromedriver-beta

이름만 보더라도 어떤 역할을 하는 패키지인지 쉽게 미루어 짐작할 수 있습니다.

우리는 일반적인 구글 크롬을 설치할 것이므로 google-chrome 패키지 링크를 클릭해줍니다.

 

그러면 위 링크의 구글 크롬 AUR 패키지 홈페이지에 들어갈 수 있게 됩니다.

 

Package Details: google-chrome 92.0.4515.159-1
---------------------------------------------------------------------------------------------
Git Clone URL:    https://aur.archlinux.org/google-chrome.git (read-only, click to copy)
Package Base:     google-chrome
Description:      The popular and trusted web browser by Google (Stable Channel)
Upstream URL:     https://www.google.com/chrome
Keywords:         chromium
Licenses:         custom:chrome
Submitter:        None
Maintainer:       luzifer
Last Packager:    luzifer
Votes:            2054
Popularity:       21.20
First Submitted:  2010-05-25 20:25
Last Updated:     2021-08-16 20:10

해당 페이지의 상단에 위와 같은 정보를 확인할 수 있습니다.

Git Clone URL: 의 링크를 클릭하면 해당 주소가 클립보드에 복사됩니다.

 

패키지 소스 복제

[study@study-virtualbox aur]$ git clone https://aur.archlinux.org/google-chrome.git

위와 같이 git 의 clone 명령을 실행해줍니다.

 

 

[study@study-virtualbox aur]$ git clone https://aur.archlinux.org/google-chrome.git
Cloning into 'google-chrome'...
remote: Enumerating objects: 976, done.
remote: Counting objects: 100% (976/976), done.
remote: Compressing objects: 100% (518/518), done.
remote: Total 976 (delta 500), reused 932 (delta 458), pack-reused 0
Receiving objects: 100% (976/976), 231.62 KiB | 284.00 KiB/s, done.
Resolving deltas: 100% (500/500), done.
[study@study-virtualbox aur]$

그러면 위와 같이 진행됩니다.

 

디렉터리 정보 확인

[study@study-virtualbox aur]$ ls -l
합계 4
drwxr-xr-x 3 study users 4096  8월  7 20:52 google-chrome
[study@study-virtualbox aur]$

 

[study@study-virtualbox aur]$ ls -l
total 4
drwxr-xr-x 3 study study 4096 Aug  7 12:15 google-chrome
[study@study-virtualbox aur]$ cd google-chrome
[study@study-virtualbox google-chrome]$

git의 clone 명령 실행 시 위 예시처럼 따로 디렉터리를 지정해주지 않으면 깃 저장소 이름이 다운로드 디렉터리로 지정됩니다.

ls 명령을 사용해보면 google-chrome이라는 이름의 디렉터리가 새로 생성된 것을 확인할 수 있습니다.

 

작업 디렉터리 진입/이동

[study@study-virtualbox aur]$ cd google-chrome
[study@study-virtualbox google-chrome]$

위와 같이 구글 크롬 깃 저장소 자료가 복제된 디렉터리로 이동합니다.

 

[study@study-virtualbox google-chrome]$ ls -aF
./   eula_text.html  google-chrome.install    PKGBUILD  update_version.sh*
../  .git/           google-chrome-stable.sh  .SRCINFO
[study@study-virtualbox google-chrome]$

깃 저장소에서 복제된 내용물은 위와 같습니다.

그런데 소스 파일이나 패키지 파일은 찾아 볼 수 없습니다.

빌드 과정에서 원본이 되는 소스 파일 또는 패키지 파일을 다운받도록 되어 있는 것입니다.

 

빌드 및 설치

[study@study-virtualbox google-chrome]$ makepkg -si

위 명령을 실행하여 다운받은 소스를 토대로 컴파일, 빌드 과정을 거친 바로 이어서 다음 이 과정을 통해 생성된 패키지를 설치합니다.

 

[study@study-virtualbox google-chrome]$ makepkg -si
==> Making package: google-chrome 92.0.4515.131-1 (Sat 07 Aug 2021 12:18:23 PM UTC)
==> Checking runtime dependencies...
==> Installing missing dependencies...
[sudo] password for study: 
resolving dependencies...
looking for conflicting packages...

Packages (2) libxss-1.2.3-3  ttf-liberation-2.1.4-1

Total Download Size:   1.56 MiB
Total Installed Size:  4.19 MiB

:: Proceed with installation? [Y/n] 
:: Retrieving packages...
 libxss-1.2.3-3-x...    14.3 KiB   227 KiB/s 00:00 [######################] 100%
 ttf-liberation-2...  1578.2 KiB  8.71 MiB/s 00:00 [######################] 100%
 Total (2/2)          1592.5 KiB  5.98 MiB/s 00:00 [######################] 100%
(2/2) checking keys in keyring                     [######################] 100%
(2/2) checking package integrity                   [######################] 100%
(2/2) loading package files                        [######################] 100%
(2/2) checking for file conflicts                  [######################] 100%
(2/2) checking available disk space                [######################] 100%
:: Processing package changes...
(1/2) installing libxss                            [######################] 100%
(2/2) installing ttf-liberation                    [######################] 100%
:: Running post-transaction hooks...
(1/2) Arming ConditionNeedsUpdate...
(2/2) Updating fontconfig cache...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Downloading google-chrome-stable_92.0.4515.131-1_amd64.deb...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 76.4M  100 76.4M    0     0  9774k      0  0:00:08  0:00:08 --:--:-- 10.0M
  -> Found eula_text.html
  -> Found google-chrome-stable.sh
==> Validating source files with sha512sums...
    google-chrome-stable_92.0.4515.131-1_amd64.deb ... Passed
    eula_text.html ... Passed
    google-chrome-stable.sh ... Passed
==> Extracting sources...
  -> Extracting google-chrome-stable_92.0.4515.131-1_amd64.deb with bsdtar
==> Entering fakeroot environment...
==> Starting package()...
  -> Extracting the data.tar.xz...
  -> Moving stuff in place...
  -> Fixing Chrome desktop entry...
  -> Removing Debian Cron job, duplicate product logos and menu directory...
==> Tidying install...
  -> Removing empty directories...
  -> Removing libtool files...
  -> Purging unwanted files...
  -> Removing static library files...
  -> Compressing man and info pages...
==> Checking for packaging issues...
==> Creating package "google-chrome"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
  -> Adding install file...
  -> Generating .MTREE file...
  -> Compressing package...
==> Leaving fakeroot environment.
==> Finished making: google-chrome 92.0.4515.131-1 (Sat 07 Aug 2021 12:18:58 PM UTC)
==> Installing package google-chrome with pacman -U...
loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) google-chrome-92.0.4515.131-1

Total Installed Size:  243.85 MiB

:: Proceed with installation? [Y/n] 
(1/1) checking keys in keyring                     [######################] 100%
(1/1) checking package integrity                   [######################] 100%
(1/1) loading package files                        [######################] 100%
(1/1) checking for file conflicts                  [######################] 100%
(1/1) checking available disk space                [######################] 100%
:: Processing package changes...
(1/1) installing google-chrome                     [######################] 100%
==> NOTE: Custom flags should be put directly in: ~/.config/chrome-flags.conf
==> NOTE: The launcher is called: 'google-chrome-stable'
Optional dependencies for google-chrome
    pipewire: WebRTC desktop sharing under Wayland [installed]
    kdialog: for file dialogs in KDE
    gnome-keyring: for storing passwords in GNOME keyring [installed]
    kwallet: for storing passwords in KWallet
:: Running post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...
[study@study-virtualbox google-chrome]$

먼저 의존성 패키지 설치 작업이 진행됩니다.

 

그후 빌드에 필요한 원본을 다운받습니다. 일반적으로 소스 파일의 압축 아카이브 파일을 다운받아 풀고 풀어진 소스를 컴파일하여 빌드한 다음 이렇게 빌드된 패키지를 시스템에 설치하는 과정을 거치게 됩니다. 이때 컴파일 과정에서 상당한 시간이 소요됩니다.

그러나 구글 크롬의 경우 깃 저장소에서 다운받는 원본이 데비안 패키지로 이미 패키징 되어 있는 것이기 때문에 소스 컴파일 과정이 생략되고 단지 데비안 패키지를 아치 리눅스용 패키지로 변환하여 설치하는 과정을 거치게 됩니다.

 

위와 같이 모든 과정이 정상적으로 이루어지면 구글 크롬은 무사히 설치되고 이후 사용자가 구글 크롬 아이콘을 클릭하여 크롬 브라우저를 사용할 수 있게 됩니다.

 

참고

[study@study-virtualbox google-chrome]$ ls -aF
./                                                google-chrome-stable.sh
../                                               pkg/
eula_text.html                                    PKGBUILD
.git/                                             src/
google-chrome-92.0.4515.131-1-x86_64.pkg.tar.zst  .SRCINFO
google-chrome.install                             update_version.sh*
google-chrome-stable_92.0.4515.131-1_amd64.deb
[study@study-virtualbox google-chrome]$

설치 후 로컬 깃 저장소에는 위와 같이 파일과 디렉터리들이 존재합니다.

 

[study@study-virtualbox ~]$ ls -aF /opt/google/chrome
./                      google-chrome*          nacl_irt_x86_64.nexe
../                     icudtl.dat              resources.pak
chrome*                 libEGL.so               swiftshader/
chrome_100_percent.pak  libGLESv2.so            v8_context_snapshot.bin
chrome_200_percent.pak  libvk_swiftshader.so    vk_swiftshader_icd.json
chrome-sandbox*         locales/                WidevineCdm/
crashpad_handler*       MEIPreload/             xdg-mime*
default-app-block       nacl_helper*            xdg-settings*
default_apps/           nacl_helper_bootstrap*
[study@study-virtualbox ~]$

그리고 구글 크롬 설치 디렉터리와 그 내용물은 위와 같습니다.


 

패키지 업그레이드

[study@study-virtualbox google-chrome]$ git pull
Already up to date.
[study@study-virtualbox google-chrome]$

최신버전이어서 업그레이드할 필요 없는 경우 위와 같이 출력됩니다.

 

[study@study-virtualbox google-chrome]$ git pull
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 3), reused 1 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 597 bytes | 99.00 KiB/s, done.
From https://aur.archlinux.org/google-chrome
   a9d9577..b92a098  master     -> origin/master
Updating a9d9577..b92a098
Fast-forward
 .SRCINFO | 6 +++---
 PKGBUILD | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)
[study@study-virtualbox google-chrome]$

업그레이드 내용이 있으면 위와 같이 깃 저장소 복제 작업이 진행됩니다.

 

[study@study-virtualbox google-chrome]$ makepkg -si
==> Making package: google-chrome 92.0.4515.159-1 (Sat 28 Aug 2021 05:02:24 AM UTC)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Downloading google-chrome-stable_92.0.4515.159-1_amd64.deb...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 76.5M  100 76.5M    0     0  9433k      0  0:00:08  0:00:08 --:--:-- 9857k
  -> Found eula_text.html
  -> Found google-chrome-stable.sh
==> Validating source files with sha512sums...
    google-chrome-stable_92.0.4515.159-1_amd64.deb ... Passed
    eula_text.html ... Passed
    google-chrome-stable.sh ... Passed
==> Extracting sources...
  -> Extracting google-chrome-stable_92.0.4515.159-1_amd64.deb with bsdtar
==> Removing existing $pkgdir/ directory...
==> Entering fakeroot environment...
==> Starting package()...
  -> Extracting the data.tar.xz...
  -> Moving stuff in place...
  -> Fixing Chrome desktop entry...
  -> Removing Debian Cron job, duplicate product logos and menu directory...
==> Tidying install...
  -> Removing empty directories...
  -> Removing libtool files...
  -> Purging unwanted files...
  -> Removing static library files...
  -> Compressing man and info pages...
==> Checking for packaging issues...
==> Creating package "google-chrome"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
  -> Adding install file...
  -> Generating .MTREE file...
  -> Compressing package...
==> Leaving fakeroot environment.
==> Finished making: google-chrome 92.0.4515.159-1 (Sat 28 Aug 2021 05:02:50 AM UTC)
==> Installing package google-chrome with pacman -U...
[sudo] password for study: 
loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) google-chrome-92.0.4515.159-1

Total Installed Size:  243.88 MiB
Net Upgrade Size:        0.03 MiB

:: Proceed with installation? [Y/n] 
(1/1) checking keys in keyring                     [######################] 100%
(1/1) checking package integrity                   [######################] 100%
(1/1) loading package files                        [######################] 100%
(1/1) checking for file conflicts                  [######################] 100%
(1/1) checking available disk space                [######################] 100%
:: Processing package changes...
(1/1) upgrading google-chrome                      [######################] 100%
==> NOTE: Custom flags should be put directly in: ~/.config/chrome-flags.conf
==> NOTE: The launcher is called: 'google-chrome-stable'
:: Running post-transaction hooks...
(1/3) Arming ConditionNeedsUpdate...
(2/3) Updating icon theme caches...
(3/3) Updating the desktop file MIME type cache...
[study@study-virtualbox google-chrome]$

설치시와 마찬가지로 makepkg -si 명령을 실행하면 위와 같이 업그레이드 작업이 진행됩니다.

 

업그레이드 완료 후 구글 크롬을 실행한 다음 Help - About Google Chrome 메뉴를 클릭하면 버전이 업그레이드된 것을 확인할 수 있습니다.

 

참고

[study@study-virtualbox google-chrome]$ ls -aF
./
../
eula_text.html
.git/
google-chrome-92.0.4515.131-1-x86_64.pkg.tar.zst
google-chrome-92.0.4515.159-1-x86_64.pkg.tar.zst
google-chrome.install
google-chrome-stable_92.0.4515.131-1_amd64.deb
google-chrome-stable_92.0.4515.159-1_amd64.deb
google-chrome-stable.sh
pkg/
PKGBUILD
src/
.SRCINFO
update_version.sh*
[study@study-virtualbox google-chrome]$

업그레이드 후 구글 크롬 로컬 깃 저장소 디렉터리의 모습입니다.