Posts published by: holrock

OPAM 2 local mirrorの作り方

インターネットに接続できないクラスター用リポジトリミラー作成シリーズのOPAM版です。

opam1の頃はopam-mirrorを使って、しこしこ作ってましたが、opam2から楽になりました (https://discuss.ocaml.org/t/how-to-setup-local-opam-mirror/4423)

作業環境にはopamインストールして、リポジトリのファイルを全てダウンロードします。

$ git clone https://github.com/ocaml/opam-repository.git
$ cd opam-repository
# パッケージをダウンロードする
$ opam admin cache
# indexファイルをつくる
$ opam admin idnex

次はミラーサーバーにcacheとopam-repositoryをコピーして、httpdから見られるようにします。 ここの設定は省略します。 内部ノードから、http://mirror-server/opam-repository, http://mirror-server/opam/cacheでアクセスできるものとします。

内部ノードにopamの実行ファイルをコピーします。パスも通して使えるようにしておきます。

# base-compilerのビルドでエラー出るが無視
$ opam init http://mirror-server …

torquestat

screenshot

github

年末年始にgolangやり直しで作ってたtorqueの監視ツールです。

こういうのが1バイナリでサクッとできるのはいいですね。

rub2を公開しました

github gem

rub2はtorque qsub用ruby DSLです。 簡単なjobを簡単に書くことを目的にデザインされています。

rub2を使うことで得られるメリットは

  • jobの終了を待つ
  • 多数のファイルなどに対するarry jobが簡単にかける
  • 失敗したjobのリトライができる

などがあります。

何年か内部で使用していたツールですが、gem化のついでに公開しました。

rubyでtorque jobを書く方はそういないと思いますが、お役に立てば幸いです。

簡単なサンプル

require 'rub2'

submit "SimpleJob" do
  execute_with Dir.glob("/etc/*.conf") do |file|
     "wc -l #{file}"
  end
end

と書くと、

wc -l nfs.conf

のようなjobがDir.glob("/etc/*.conf")が返した配列の要素ごとに生成され実行されます。

その後、各jobやqstatの状態を監視し、すべてのjobが終了するまで待ち合わせます。

あれこれ …

pypiのミラーを作る

bandersnatchを使用してpypiミラーを作成します。

数日ほど時間がかかる上、500GiBぐらいディスクを使います。

bandersnatchのインストール

$ virtualenv bandersnatch
$ cd bandersnatch
$ bin/pip install -r https://bitbucket.org/pypa/bandersnatch/raw/stable/requirements.txt

bandersnatch.conf

# ミラーのコピー先
directory = /usr/local/mirror/pypi/
master = https://pypi.python.org
timeout = 10
# worker=1だとすごく時間がかかる
workers = 3
hash-index = false
stop-on-error = false
delete-packages = true

不要なバイナリのコピーをやめる

完全なミラーを作る必要がなく、linuxでだけ使用するのでwin32 …

torque 6.1でarray jobが300しか実行されない

torqueのバージョンを上げるとqstat -qでみたときに下記のように300しかでなくなった。

Queue            Memory CPU Time Walltime Node  Run Que Lm  State
---------------- ------ -------- -------- ----  --- --- --  -----
batch              --      --       --      --    0  300 --   E R
                                               ----- -----
                                                   0   300

http://docs.adaptivecomputing.com/torque/6-1-0/releaseNotes/Content/topics/releaseNotes/newFeatures.htm

Job Arrays Now Only Partially Instantiated By Default

Job arrays are now only partially instantiated by default …

maui alert

ALERT: cannnot create reservation in MJobReserv

というメッセージがmaui.logに出ているときは RESDEPTHの値を大きくする。

http://docs.adaptivecomputing.com/maui/a.fparameters.php

インターネットにつながらないLinuxクラスターを運用する

はしがき

ここ最近は小規模なLinuxクラスターの運用管理もやっています。

事情よりクラスター自体がインターネットに接続できないため、通常に比べ管理が面倒だったり、外部サービスを利用できないため不便なことが多々あります。 そんな環境で色々やってるので書いておきます。

環境はCentOS7です。

構成管理

ansibleを使用しています。クライアント側にインストールの必要が無いため、管理用端末のみインターネットに接続してインストールすればいいので楽です。

ansible用ユーザーを作って公開鍵認証にしていますが、初回のユーザー作成と鍵配布もansibleで行うため、 そのときだけはremote_user: rootbecome_method: suを使ってrootパスワードを使用しています。

---
- hosts: all
  become: yes
  become_method: su
  remote_user: root
  tasks:
    - name: provisioner
      user:
        name: provisioner
        append: yes
    - name: provisioner ssh key
      authorized_key:
        user: provisioner
        key: "{{ lookup('file', '../../ssh/id_rsa.pub') }}"
    - name …

CVE-2017-9772の脆弱性

OCaml4.04.0,4.04.1にローカル権限昇格の脆弱性があったので4.04.2が出てます。

0007557: local privilege escalation issue with ocaml binaries

影響を受けるのは以下の状況ですが、かなり限定的だと思います。詳しくは上のmantisの方に再現手順があります。

  1. ocamlコンパイラで生成され、setuid, setgidされた実行ファイルが実行される際に
  2. CAML_CPLUGINS, CAML_NATIVE_CPLUGINS, CAML_BYTE_CPLUGINS環境変数に共有ライブラリへのパスを設定された場合
  3. 共有ライブラリ内でのsetreuidによって権限昇格が可能になる

注入される共有ライブラリは既存のランタイム内hookが利用可能で、 この件とは直接関係ありませんが環境変数から注入可にしては強力すぎるように見えます。

/* Load dynamic plugins indicated in the CAML_CPLUGINS environment
   variable. These plugins can be used to set currently existing
   hooks, such as …

OCaml 4.04.1

OCaml 4.04.1が出ました。 Changes

Set.mapのバグも修正されているので インストールしようと思いましたが、opam updateしてもopam switch listに出てきません。

redditでも話題 になっています。 mergeしたからopam updateした?というコメントもありますが、 実際のところ、opam updateが参照しているhttps://opam.ocaml.org/urls.txtに変更が書かれていないため、リストに出てこないようです。

そうこうしているうちにhomebrewの方に4.04.1が来てたのでopam switch systemで済ませてしまいました。

Biocaml SAM header

ocaml製のバイオインフォマティクス用ライブラリで、 biocamlというのがあります。

BAMファイルを読みたかったので使ってみましたが、 @HGヘッダーにあるGO(group order)に未対応で読めなかったため、 ちょっと修正しました。

opamで落ちてくる0.6.0用です。

utop # #require "biocaml.unix";;
utop # open Biocaml_unix.Std;;
utop # Bam.read (open_in "a.bam");;
- : (Bam.Header.t * Sam.alignment Core_kernel.Std.Or_error.t Stream.t)
Core_kernel.Result_wrapper.Result.Error
 ("unexpected tag for given header item type …