LoginSignup
0
0

More than 1 year has passed since last update.

HGC(Human Genome Center)上にHomebrew(Linuxbrew)を構築する

Posted at

Introduction

先日のメンテナンスでLinuxbrew環境が壊れてしまったのでこの機会に整理しておく…

Summary

  • $HOMEがsymlinkであるため、Homebrew上でリンクを辿らないようにするよう書き換えが必要

  • cacertが古いため(?)設定が必要

  • 環境変数が特殊なためHOMEBREW_NO_ENV_FILTERINGが必要、それに伴いxzのCentOS 7用パッチが必要

  • gitのmake時にNEEDS_LIBICONV=1が必要

Prepare cacert

mkdir -p $HOME/.certs
wget --no-check-certificate -O - https://curl.se/ca/cacert.pem > $HOME/.certs/cacert.pem 
cat >> ~/.curlrc << EOM
cacert = $HOME/.certs/cacert.pem
capath = $HOME/.certs/
EOM

Prepare .bashrc

export GIT_EXECUTABLE=/usr/local/package/git/2.20.0/bin/git
export HOMEBREW_NO_ENV_FILTERING=1
export HOMEBREW_CURLRC=1

Bootstrap Homebrew

Install using older script which does not check curl version.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/fb3acdd4ba286d3b08c980980ec63c8a888d1241/install.sh)"

Patch Homebrew

diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh
index 6e6693c82..73d256ce3 100644
--- a/Library/Homebrew/cmd/update.sh
+++ b/Library/Homebrew/cmd/update.sh
@@ -728,7 +728,7 @@ EOS
       export HOMEBREW_UPDATE_BEFORE"${TAP_VAR}"="${CURRENT_REVISION}"
       export HOMEBREW_UPDATE_AFTER"${TAP_VAR}"="${CURRENT_REVISION}"
     else
-      merge_or_rebase "${DIR}" "${TAP_VAR}" "${UPSTREAM_BRANCH}"
+      #merge_or_rebase "${DIR}" "${TAP_VAR}" "${UPSTREAM_BRANCH}"
       [[ -n "${HOMEBREW_VERBOSE}" ]] && echo
     fi
   done
diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb
index 381ceccfd..c64b7cac6 100644
--- a/Library/Homebrew/extend/ENV/shared.rb
+++ b/Library/Homebrew/extend/ENV/shared.rb
@@ -29,7 +29,7 @@ module SharedEnvExtension
     MACOSX_DEPLOYMENT_TARGET SDKROOT DEVELOPER_DIR
     CMAKE_PREFIX_PATH CMAKE_INCLUDE_PATH CMAKE_FRAMEWORK_PATH
     GOBIN GOPATH GOROOT PERL_MB_OPT PERL_MM_OPT
-    LIBRARY_PATH LD_LIBRARY_PATH LD_PRELOAD LD_RUN_PATH
+    LIBRARY_PATH LD_PRELOAD LD_RUN_PATH
   ].freeze
   private_constant :SANITIZED_VARS
 
diff --git a/Library/Homebrew/shims/super/cc b/Library/Homebrew/shims/super/cc
index c629efa9e..ab06eb15d 100755
--- a/Library/Homebrew/shims/super/cc
+++ b/Library/Homebrew/shims/super/cc
@@ -257,7 +257,7 @@ class Cmd
 
   def keep?(path)
     # Allow references to self
-    if formula_prefix && path.start_with?("#{formula_prefix}/")
+    if formula_prefix && (path.start_with?("#{formula_prefix}/") || path.start_with?("#{Pathname.new(formula_prefix).realpath}/"))
       true
     # first two paths: reject references to Cellar or opt paths
     # for unspecified dependencies
diff --git a/bin/brew b/bin/brew
index a6e4f8865..1f3f5cf7e 100755
--- a/bin/brew
+++ b/bin/brew
@@ -39,7 +39,7 @@ do
 done
 unset cmd
 
-BREW_FILE_DIRECTORY="$(quiet_cd "${0%/*}/" && pwd -P)"
+BREW_FILE_DIRECTORY="$(quiet_cd "${0%/*}/" && pwd)"
 HOMEBREW_BREW_FILE="${BREW_FILE_DIRECTORY%/}/${0##*/}"
 HOMEBREW_PREFIX="${HOMEBREW_BREW_FILE%/*/*}"
 
  • The LD_LIBRARY_PATH thing is to keep libgcc available in homebrew world.
  • Removing pwd -P (and allowing Pathname.new(formula_prefix).realpath) is very specific to HGC, where $HOME is symlink. Some symlinks must not be resolved or after home-disk migration your homebrew will be messed up.
  • By the way in this way you cannot brew update. You need to git update .linuxbrew/Homebrew and each Taps.

Install xz

Due to HOMEBREW_NO_ENV_FILTERING, /usr/bin/xz will load homebrew's liblzma, which is usually incompatible. You need patched xz:

brew install cielavenir/ciel/xz

Upgrade git

NEEDS_LIBICONV=1 brew install git

My Formula customizations

diff --git a/Formula/patchelf.rb b/Formula/patchelf.rb
index a7a9f22a260..65e315284b3 100644
--- a/Formula/patchelf.rb
+++ b/Formula/patchelf.rb
@@ -21,7 +21,7 @@ class Patchelf < Formula
   end
 
   on_linux do
-    depends_on "gcc"
+    #depends_on "gcc"
   end
 
   fails_with gcc: "5" # Needs std::optional
diff --git a/Formula/pkg-config.rb b/Formula/pkg-config.rb
index 6b845cdca5f..3cd38c37128 100644
--- a/Formula/pkg-config.rb
+++ b/Formula/pkg-config.rb
@@ -48,6 +48,7 @@ class PkgConfig < Formula
                           "--disable-host-tool",
                           "--with-internal-glib",
                           "--with-pc-path=#{pc_path}",
+                          "--with-libiconv=gnu",
                           "--with-system-include-path=#{MacOS.sdk_path_if_needed}/usr/include"
     system "make"
     system "make", "install"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0