Linuxbrew

作成日 : 2013-11-17
最終更新日 :

Linuxbrewとは

Linuxbrew とは、MacOS の Homebrew の Linux 版である。 Homebrew とは何かというと、同じプログラムの複数のバージョンを同時に管理できる仕組み (パッケージ管理システム)である。 ちなみに英語で homebrew とは自家醸造を意味する。 このファイルの hejmfarita はエスペラントで「自家製の」を意味する。

以上の記事を書いた 2013 年当時は Homebrew とは独立に Linuxbrew があったが、 2019 年に Linuxbrew は本家 Homebrew に統合された。以下の「Vine Linux でインストール挑戦」「rbenv」、「PostgreSQL」は Linuxbrew 時代の覚書である。

Vine Linux でインストール挑戦

Vine Linux は国内で作られた Linux ディストリビューションの一つである。 私はけっこう長い間使っていたが、Vine Linux は 2021 年 5 月に VineSeed を除きすべてのリリースを停止している。

Vine Linux は全体的に入っているパッケージが古いので、Linuxbrew が役に立ちそうだ。ではがんばって導入してみよう。 リンクに従い、下記パッケージを導入した。

$ sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

ところが、Vine Linux 6.3 では上記のうち、libbz-dev 以下の開発用ライブラリが軒並みみつからず、インストールできない。 仕方ない。無謀でもこのまま Linuxbrew を導入してみたらどうなるだろうか。実施した結果は次の通りで、あえなく撃沈した。

  $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"
  ==> This script will install:
  $HOME/.linuxbrew/bin/brew
  $HOME/.linuxbrew/Library/...
  $HOME/.linuxbrew/share/man/man1/brew.1
  
  Press RETURN to continue or any other key to abort
  ==> Downloading and installing Homebrew...
  fatal: Unable to find remote helper for 'https'
  Failed during: git fetch origin master:refs/remotes/origin/master -n
  

この原因は、git をコンパイルしたときに curl ライブラリがリンクされていなかったことにある。

  $ ./configure --with-curl
  $ make
  $ sudo make install
  

ここで curl とは非対話的 http(s) 通信ソフトで、 私の認識では wget と並ぶ(wget の進化版か)。 さて、curl つきの git を作って起動させてみたが、 次の表示が出て失敗してしまった。

  $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"
  It appears Homebrew is already installed. If your intent is to reinstall you
  should do the following before running this installer again:
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/uninstall)"
  (省略)
  

仕方がないので、一度きれいにした。

  $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/uninstall)"
  which: no bre in ($PATH)
  Warning: This script will remove:
  $HOME/.cache/Homebrew/
  $HOME/.cache/.linuxbrew/.git/
  Are you sure you want to uninstall Homebrew? [y/N] y
  ==> Removing Homebrew installation...
  ==> Removing empty directories...
  ==> Homebrew uninstalled!
  

再度挑戦したら、うまくいったようだ。

  $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"
  ==> This script will install:
  $HOME/.linuxbrew/bin/brew
  $HOME/.linuxbrew/Library/...
  $HOME/.linuxbrew/share/doc/homebrew
  $HOME/.linuxbrew/share/man/man1/brew.1
  $HOME/.linuxbrew/share/zsh/site-functions/_brew
  $HOME/.linuxbrew/etc/bash_completion.d/brew
  $HOME/.linuxbrew/.cache/Homebrew/
  
  Press RETURN to continue or any other key to abort
  ==> Downloading and installing Linuxbrew...
  (中略)
  ==> Homebrew has enabled anonymous aggregate user behaviour analytics.
  Read the analytics documentation (and how to opt-out) here:
    http://docs.brew.sh/Analytics.html
  
  ==> Tapping homebrew/core
  (中略)
  ==> Installation successful!
  ==> Next steps
  Install the Linuxbrew dependencies:
  
  Debian, Ubuntu, etc.:
    `sudo apt-get install build-essential`
  
  Fedora, Red Hat, CentOS, etc.:
    `sudo yum groupinstall 'Development Tools'`
  
  See http://linuxbrew.sh/#dependencies for more information.
  
  Add to your ~/.bash_profile by running
    echo 'export PATH="$HOME/.linuxbrew/bin:$PATH"' >>~/.bash_profile
    echo 'export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"' >>~/.bash_profile
    echo 'export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"' >>~/.bash_profile
  
  We recommend you install GCC by running `brew install gcc`.
  Run `brew help` to get started
  Further documentation: https://git.io/brew-docs
  ==> Homebrew has enabled anonymous aggregate user behaviour analytics
  Read the analytics documentation (and how to opt-out) here:
    https://git.io/brew-analytics
  

なお、実際には、$HOME のところは実在するディレクトリとなっている。

なんだかんだで自家醸造ができたようだ。

rbenv

本項は作成日(2013-11-17)時点の情報だ。

rbenv とは ruby (rb) のバージョンを環境 (env) によって切り替えられるツールである。 現在私の rbenv はどういうわけか入っている。

    $ which rbenv
    $HOME/.rbenv/bin/rbenv
    $ rbenv -v
    rbenv 1.1.0-2-g4f8925a
    

さて、rbenv が使えるか。 rbenv でインストール可能なバージョン一覧が出るというのだが。

$ rbenv install -l
    rbenv: no such command `install'
    

バカにしとるのか!仕方がない。brew を使って rbenv をインストールするか。

    $ brew rbenv
    ==> Installing dependencies for rbenv: m4, autoconf, pkg-config, zlib, gpatch, openssl, ruby-build
    ==> Installing rbenv dependency: m4
    ==> Downloading https://linuxbrew.bintray.com/bottles/m4-1.4.18.x86_64_linux.bot
    ######################################################################## 100.0%
    ==> Pouring m4-1.4.18.x86_64_linux.bottle.tar.gz
       $HOME/.linuxbrew/Cellar/m4/1.4.18: 13 files, 1.1MB
    ==> Installing rbenv dependency: autoconf
    ==> Downloading https://linuxbrew.bintray.com/bottles/autoconf-2.69.x86_64_linux
    ######################################################################## 100.0%
    ==> Pouring autoconf-2.69.x86_64_linux.bottle.4.tar.gz
    ==> Caveats
    
    Emacs Lisp files have been installed to:
      $HOME/.linuxbrew/share/emacs/site-lisp/autoconf
    ==> Summary
      $HOME/.linuxbrew/Cellar/autoconf/2.69: 70 files, 3MB
    ==> Installing rbenv dependency: pkg-config
    Error: pkg-config cannot be built with any available compilers.
    Install Clang or brew install gcc
    

これはインストールの連鎖、インストール地獄ですな。 こうなったら毒食わば皿まで、brew install gcc やってやろうじゃないの。

    $ brew install gcc
    ==> Installing dependencies for gcc: zlib, gmp, mpfr, libmpc, isl
    ==> Installing gcc dependency: zlib
    (中略)
    ==> Installing gcc dependency: gmp
    (中略)
    ==> Installing gcc dependency: mpfr
    (中略)
    ==> Installing gcc dependency: libmpc
    (中略)
    ==> Installing gcc dependency: isl
    (中略)
    ==> Installing gcc
    (後略)
    

なんとかうまくいったようだ。こんどこそ、か。

$ brew install rbenv
    ==> Installing dependencies for rbenv: pkg-config, gpatch, openssl, ruby-build
    ==> Installing rbenv dependency: pkg-config
    ==> Downloading https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
    ######################################################################## 100.0%
    ==> ./configure --prefix=$HOME/.linuxbrew/Cellar/pkg-config/0.29.2 --disable-host-tool --with-i
    ==> make
    Last 15 lines from $HOME/.cache/Homebrew/Logs/pkg-config/02.make:
    See  for instructions.
    make[6]: *** [libglib_2_0_la-grand.lo] エラー 1
    make[6]: *** 未完了のジョブを待っています....
    make[6]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2/glib/glib' から出ます
    make[5]: *** [all-recursive] エラー 1
    make[5]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2/glib/glib' から出ます
    make[4]: *** [all] エラー 2
    make[4]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2/glib/glib' から出ます
    make[3]: *** [all-recursive] エラー 1
    make[3]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2/glib' から出ます
    make[2]: *** [all] エラー 2
    make[2]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2/glib' から出ます
    make[1]: *** [all-recursive] エラー 1
    make[1]: ディレクトリ `/tmp/pkg-config-20170423-11689-1f9dyyf/pkg-config-0.29.2' から出ます
    make: *** [all] エラー 2
    
    READ THIS: https://github.com/Linuxbrew/brew/blob/master/docs/Troubleshooting.md#troubleshooting
    
    These open issues may also help:
    pkg-config: better tests https://github.com/Homebrew/homebrew-core/pull/12522
    

何度やってもエラーでうまくいかない。 原因を探るのは諦め、gpatch, openssl, ruby-build のそれぞれのインストールを行う。

$ brew install gpatch

これは問題なくインストールできた。

$ brew install openssl
    ==> Downloading https://www.openssl.org/source/openssl-1.0.2k.tar.gz
    ######################################################################## 100.0%
    ==> Downloading https://github.com/openssl/openssl/pull/1524.patch
    ==> Downloading from https://patch-diff.githubusercontent.com/raw/openssl/openss
    ######################################################################## 100.0%
    ==> Patching
    ==> Applying 1524.patch
    patching file Configure
    Hunk #1 succeeded at 1723 (offset 2 lines).
    ==> perl ./Configure --prefix=$HOME/.linuxbrew/Cellar/openssl/1.0.2k --op
    ==> make depend
    ==> make
    Last 15 lines from $HOME/.cache/Homebrew/Logs/openssl/03.make:
    b_print.c: In function 'roundv':
    b_print.c:607:5: internal compiler error: Illegal instruction
         if (value >= 0.5)
         ^
    0x7fecebecfcff ???
      /home/vbuilder/rpm/BUILD/glibc-2.23/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
    Please submit a full bug report,
    with preprocessed source if appropriate.
    Please include the complete backtrace with any bug report.
    See >https://github.com/Homebrew/homebrew/issues> for instructions.
    make[2]: *** [b_print.o] Error 1
    make[2]: Leaving directory `/tmp/openssl-20170423-4341-x7kult/openssl-1.0.2k/crypto/bio'
    make[1]: *** [subdirs] エラー 1
    make[1]: ディレクトリ `/tmp/openssl-20170423-4341-x7kult/openssl-1.0.2k/crypto' から出ます
    make: *** [build_crypto] エラー 1
    
    READ THIS: https://github.com/Linuxbrew/brew/blob/master/docs/Troubleshooting.md#troubleshooting
    
    These open issues may also help:
    sslscan: add option to statically link OpenSSL https://github.com/Homebrew/homebrew-core/pull/10556
    Curl formula complains that the `--with-openssl` does not exist when run with `--nghttp2`. https://github.com/Homebrew/homebrew-core/issues/12409
    

ruby-build はどうだろうか。

$ brew install ruby-build
    ==> Installing dependencies for ruby-build: pkg-config, openssl
    ==> Installing ruby-build dependency: pkg-config
    (後略)

そうか、ruby-build が pkg-config と openssl に依存しているのだから、どうしようもないな。

$ brew doctor
    Please note that these warnings are just used to help the Homebrew maintainers
    with debugging if you file an issue. If everything you use Homebrew for is
    working fine: please don't worry and just ignore them. Thanks!
    
    Warning: "config" scripts exist outside your system or Homebrew directories.
    `./configure` scripts often look for *-config scripts to determine if
    software packages are installed, and what additional flags to use when
    compiling and linking.
    
    Having additional scripts in your path can confuse software installed via
    Homebrew if the config script overrides a system or Homebrew provided
    script of the same name. We found the following "config" scripts:
      /usr/local/bin/x86_64-unknown-linux-gnu-pkg-config
      /usr/local/bin/pkg-config
      /usr/local/bin/gauche-config
      /usr/local/bin/curl-config

ところが http://qiita.com/ringo/items/4351c6aee70ed6f346c8 をみたら、 apt でインストールできるようになってました。 とのことだったのでやってみた。

$ sudo apt install rbenv ruby-build
    パッケージリストを読みこんでいます... 完了
    依存情報ツリーを作成しています... 完了        
    以下のパッケージが新たにインストールされます:
      rbenv ruby-build
    アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 0 個
    104kB のアーカイブを取得する必要があります。
    展開後に 226kB のディスク容量が追加消費されます。
    取得:1 http://updates.vinelinux.org 6.5/x86_64/plus ruby-build 0.0.20170407-1vl6 [80.4kB]
    取得:2 http://updates.vinelinux.org 6.5/x86_64/plus rbenv 1.1.0.20170407-1vl6 [23.6kB]
    104kB を 0s で取得しました (563kB/s)
    変更を適用しています...
    準備中                                ############################## [100%]
    更新/インストール中
      rbenv-1.1.0.20170407-1vl6.noarch       ############################## [100%]
    You probably want to execute the following line to add rbenv to your shell
    echo 'eval "$(rbenv init -)"' >> /root/.bash_profile
      ruby-build-0.0.20170407-1vl6.noarch    ############################## [100%]
    完了
    
$ rbenv install
    rbenv: no such command `install'

これには、ruby-build を入れればいいようなのだが。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    Cloning into '$HOME/.rbenv/plugins/ruby-build'...
    git-remote-https: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
    

そういえば、もののはずみで curl を remove していた。もう一回入れなおす。

$ sudo apt install curl
    パッケージリストを読みこんでいます... 完了
    依存情報ツリーを作成しています... 完了        
    以下のパッケージが新たにインストールされます:
      curl
    アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
    0B/598kB のアーカイブを取得する必要があります。
    展開後に 1556kB のディスク容量が追加消費されます。
    変更を適用しています...
    準備中                                ############################## [100%]
    更新/インストール中
      curl-7.51.0-1vl6.x86_64                ############################## [100%]
    /sbin/ldconfig: /usr/lib/libbrscandec2.so.1 はシンボリックリンクではありません
    
    /sbin/ldconfig: /usr/lib/libbrcolm2.so.1 はシンボリックリンクではありません
    
    完了
    

よし。こんどこそ ruby-build が入るだろう。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    Cloning into '$HOME/.rbenv/plugins/ruby-build'...
    remote: Counting objects: 7484, done.
    remote: Total 7484 (delta 0), reused 0 (delta 0), pack-reused 7483
    Receiving objects: 100% (7484/7484), 1.52 MiB | 1.94 MiB/s, done.
    Resolving deltas: 100% (4531/4531), done.
    $

では次に、ruby 2.4.0 を入れることにする。

$ rbenv install 2.4.0
    Downloading ruby-2.4.0.tar.bz2...
    -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
    Installing ruby-2.4.0...
    
    BUILD FAILED (Linux 4.4.52-2vl6 using ruby-build 20170405-2-g3b15693)
    
    Inspect or clean up the working tree at /tmp/ruby-build.20170423163549.9737
    Results logged to /tmp/ruby-build.20170423163549.9737.log
    (後略)
    

これはコンパイルに失敗したことを示している。ログを見てみると、驚くべきことがわかった。

(前略)
    compiling dmydln.c
    In file included from ./include/ruby/intern.h:32:0,
                     from ./include/ruby/ruby.h:2001,
                     from dmydln.c:1:
    $HOME/.linuxbrew/Cellar/gcc/5.3.0/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include/varargs.h:4:2: error: #error "GCC no longer implements <varargs.h>."
     #error "GCC no longer implements <varargs.h>."
      ^
    $HOME/.linuxbrew/Cellar/gcc/5.3.0/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include/varargs.h:5:2: error: #error "Revise your code to use <stdarg.h>."
     #error "Revise your code to use <stdarg.h>."
      ^
    In file included from ./include/ruby/intern.h:32:0,
                     from ./include/ruby/ruby.h:2001,
                     from ./include/ruby.h:33,
                     from main.c:13:
    
    

うーん、これだけみればオリジナルのソースにある <varargs.h> を <stdarg.h> に書き換えればいいのだけれど。 多分これは新しい gcc を使ったために出たのだろう。新しい gcc は Homebrew している。

$ gcc --version
    gcc (Homebrew gcc 5.3.0) 5.3.0
    Copyright (C) 2015 Free Software Foundation, Inc.
    (後略)
    

一方、古い gcc もあったと思う。

$ /usr/bin/gcc --version
    gcc (GCC) 4.9.3
    Copyright (C) 2015 Free Software Foundation, Inc.
    (後略)
    

古いほうならコンパイルできるのかな。2.2.0 を作ってしまった。

$ export CC="/usr/bin/gcc"; rbenv install 2.4.0; unset CC
    Downloading ruby-2.4.0.tar.bz2...
    -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
    Installing ruby-2.4.0...
    
    BUILD FAILED (Linux 4.4.52-2vl6 using ruby-build 20170405-2-g3b15693)
    
    Inspect or clean up the working tree at /tmp/ruby-build.20170423163549.9737
    Results logged to /tmp/ruby-build.20170423163549.9737.log
    (後略)
    

Ubuntu などの場合

$ sudo add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./" $ curl -L https://cli-assets.heroku.com/apt/release.key | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install heroku

その他の場合

    $ # wget --no-check-certificate https://cli-assets.heroku.com/branches/stable/heroku-OS-ARCH.tar.gz
    $ wget --no-check-certificate https://cli-assets.heroku.com/branches/stable/heroku-linux-386.tar.gz
    $ mkdir -p /usr/local/lib /usr/local/bin
    $ sudo tar -xvzf heroku-OS-ARCH.tar.gz -C /usr/local/lib 
    $ sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
    
PostgreSQL

本項は作成日(2013-11-17)時点の情報だ。

さて、PostgreSQL のインストールはうまくいくだろうか。なお、$HOME を ~ と略記している。

$ brew install postgresql
    ==> Tapping linuxbrew/extra
    Cloning into '~/.linuxbrew/Library/Taps/linuxbrew/homebrew-extra'...
    remote: Counting objects: 12, done.
    remote: Compressing objects: 100% (12/12), done.
    remote: Total 12 (delta 0), reused 3 (delta 0), pack-reused 0
    Unpacking objects: 100% (12/12), done.
    Tapped 4 formulae (43 files, 159.5KB)
    ==> Installing dependencies for postgresql: openssl, pkg-config, ncurses, readline, libxml2, libxslt, xz, gdbm, berkeley-db, expat, perl, util-linux
    ==> Installing postgresql dependency: openssl
    ==> Downloading https://www.openssl.org/source/openssl-1.0.2k.tar.gz
    Already downloaded: ~/.cache/Homebrew/openssl-1.0.2k.tar.gz
    ==> Downloading https://github.com/openssl/openssl/pull/1524.patch
    Already downloaded: ~/.cache/Homebrew/openssl--patch-853a15755d3bc2b561d64c4f5d58a7ff4885e5cdbacbf429ce93b477e0d3d68e.patch
    ==> Patching
    ==> Applying 1524.patch
    patching file Configure
    Hunk #1 succeeded at 1723 (offset 2 lines).
    ==> perl ./Configure --prefix=~/.linuxbrew/Cellar/openssl/1.0.2k --openssldir=~/.linuxbrew/etc/openssl no
    ==> make depend
    ==> make
    Last 15 lines from ~/.cache/Homebrew/Logs/openssl/03.make:
    b_print.c: In function 'roundv':
    b_print.c:607:5: internal compiler error: Illegal instruction
         if (value >= 0.5)
         ^
    0x7f1c3b578cff ???
      /home/vbuilder/rpm/BUILD/glibc-2.23/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
    Please submit a full bug report,
    

Ubuntu 22.04 へのインストール

本項は(2025-05-16)時点の情報だ。

現在私が使っている Linux は WSL2 の Ubuntu 22.04 である。ここにインストールした。 https://brew.sh/ja に行けばよい。書いてあることを行なうと、最後に次のメッセージが出た。

  ==> Installation successful!

  ==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
  Read the analytics documentation (and how to opt-out) here:
    https://docs.brew.sh/Analytics
  No analytics data has been sent yet (nor will any be during this install run).
  
  ==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
    https://github.com/Homebrew/brew#donations
  
  ==> Next steps:
  - Run these commands in your terminal to add Homebrew to your PATH:
      echo >> /home/username/.bashrc
      echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/username/.bashrc
      eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
  - Install Homebrew's dependencies if you have sudo access:
      sudo apt-get install build-essential
    For more information, see:
      https://docs.brew.sh/Homebrew-on-Linux
  - We recommend that you install GCC:
      brew install gcc
  - Run brew help to get started
  - Further documentation:  
      https://docs.brew.sh

ここで username としているのは、実際には私のユーザ名が書かれている。 ここで、上記の Next steps: に書かれていることを実施しないと、$ brew としても「そんなの見当たらない」とシェルに言われるので注意すること。

$ brew -v
コマンド 'brew' が見つかりません。もしかして:
  command 'brec' from deb bplay (0.991-10build1)
  command 'qbrew' from deb qbrew (0.4.1-8build1)
次を試してみてください: sudo apt install <deb name>

もちろん、上記の Next steps: を行なえば、brew が正しくインストールされる。

$ brew -v
Homebrew 4.5.2

リンク

まりんきょ学問所UNIX 手習い > Linuxbrew


MARUYAMA Satosi