Linux」カテゴリーアーカイブ

スクリプト言語で環境変数を取得する方法

シェルスクリプト(Bash)

普通の変数と同様に参照すれば良い。

変数が設定されているかどうかの確認:

[ -z "${HOGE+x}" ]

変数の取得:

echo $SHELL

Python

準備:

import os

変数が設定されているかどうかの確認:

os.environ.has_key("SHELL")

変数の取得:

os.environ["SHELL"]

R

変数が設定されているかどうかの確認:

Sys.getenv("SHELL") が "" かどうかをチェックする。

変数の取得:

Sys.getenv("SHELL")

R で igraph を使うための Tips

graph 構造を持つデータの処理をしたくて、R + igraph を使おうと思ったけど、一部ハマったことがあるのでメモ。

igraph は Ubuntu では標準のリポジトリにはないので、R の中で、

install.packages("igraph") 

してインストールする。すると igraph の最新版が入るわけだけど、読み込んで使おうとするとなんか変なエラーで止まってしまう。igraph のページに明示的には書かれていないけど、 Ubuntu でデフォルトのリポジトリで入れられる R のバージョンは古いらしい。

そこで、CRAN が提供している Ubuntu 向けのリポジトリを apt-get の source に追加して、apt-get で R を最新版にアップデートすると無事に使えるようになる。

ちなみに、R でパッケージをインストールする際には、一般ユーザで install.packages() を実行すると、ユーザディレクトリの中にインストールされ、特権ユーザで実行するとシステムにインストールすることができる。

Samba で別サーバで稼働している LDAP を認証に使う方法

Microserver に CentOS 7 を入れてファイルサーバとして使えるようにした。その時に Samba でアクセスできるようにしたかったのだが、LDAP サーバはすでに別のサーバで動かしている。 「Samba LDAP」 とかで調べると、LDAP が動いているサーバで Samba も動かす方法が書いてあったりしてなかなか欲しい情報に辿りつけない。しかも、Samba は Windows の認証の機能(ドメインコントローラとかいうそうな)もあるようで、Active Directory 関連の情報も出てきたりしてさらにわけがわからなくなってくる。つまりはググラビリティが低い。

このサイトこのサイトがかなり参考になる。設定をスムーズに行うために理解しなければならないのは、以下の点と思う。

  1. Samba の認証を LDAP で行うためには、Samba の認証に使う情報を LDAP の各ユーザのエントリに持たせる必要があり、そのためにスキーマの追加が必要。
  2. Samba パスワードを pbdedit や smbpasswd コマンドで変更できるようにするためには、自分の LDAP アカウントを書き換えられるように LDAP サーバのアクセス制御をしておく必要がある。
  3. Unix アカウントのパスワードと、Samba のパスワードは LDAP においては別の Attribute として保持される。Unix アカウントのパスワードと、Samba パスワードを同期させるためには、/etc/smb.conf で
    ldap passwd sync = yes
    

    とすればよいが、これは Samba からパスワードを変更した時に Unix アカウントのパスワードも変更するというものであって、その逆をすると(つまり passwd コマンド等で Unix アカウントのパスワードを変えると)別々のパスワードが設定されることになる。

  4. CentOS 7 でも
    yum install samba-client
    

    とすれば smbpasswd コマンドを使うことができる。

それにしてもディレクトリサービスは複雑すぎる。できることが多いのはわかるけど、もっと扱い易くないと簡単にわけわからんくなってしまうよ。

HP ProLiant MicroServer N54L 購入

最終ロットの文言に後押しされて買った。
ファイルサーバにして、データ置き場に使う。

FreeNAS とかもいいなと思ったけど、メモリが 4GB しか搭載してなくて要求 8GB に届かなかったのでやめた。とりあえず CentOS 7 をインストールしてみた。

内部 USB ポートに 16GB のフラッシュメモリを挿して、そこに OS をインストール。
それ以外に 3GB SATA HDD を 2 本挿して LVM でミラー。コンパクトな筐体ながらディスクを 4 本も挿せるのがいい。手狭になったら拡張できる。

RAC 付きのモデルを購入したので、Web UI から電源の入/切もできるし、ビデオリダイレクションもできる。値段を考えると素晴らしい。
インターフェース拡張のために RAC を挿してももう一つ PCIe のスロットがあるというのもいけてる。NIC を増設してルータにする、とかもできそう。

CPU は 2 コアで今のところ力不足は感じていない。
メモリも 4GB もあれば十分に感じる。
研究上の実験データをこの中に突っ込んで DB で参照できたりしたら最高だけど、そこまでのスペックではないなぁ、と思ったり。

このモデルはもう販売停止で、後継のGen8 は価格帯が上がっているので、他に新たな安鯖が登場してくれるといいんですが。

OpenVPN client on CentOS 7

CentOS 7 を OpenVPN client にする話。
うまい説明が見つけられなかったのでメモしておく。

tun の場合は openvpn を起動するだけで OK だけど、 tap の場合には openvpn を起動するだけでは繋がらない。
この場合、あらかじめブリッジを作成しておいて (br1とする) 、openvpn が作った tap デバイス (tap1 とする) する。

# brctl addif br1 tap1

とした上で、

# ifconfig tap1 up

とし、 br1 に振った(振られた) IP アドレスで VPN につながるようになる。

自前のVDI環境について考える

VDIを使いたい理由

  • Windows環境はたまに使えれば良いが、Windows自体もOfficeもソフトウェアライセンスが高い
    使いたいときだけ使える環境を家族でシェアすればライセンス料を削減可能
  • Mac環境(ラップトップ)にVMでWindowsを動かすのもいいけど、家族でシェアできないしグラフィック処理がちょっと重い(気がする)
    GPUをパススルーできる環境で動かしたい
  • 電源とネットワークがあればマシンを遠隔地に置いておける!
  • 一昔前のPCをうまく活用できたりするとなお good

VDI環境の要件

  • 安いこと。高いソリューションを導入するくらいならPC買ったほうが安くなることが多いし、Amazon使おうぜとかなっちゃう。
  • 接続元(クライアント)からUSBリダイレクション可能であること
    • やっぱ繋ぎたいよね。
    • Windows のリモートデスクトップはUSBリダイレクションもできるらしいけどPro版以上が必要。Pro版持っていない。。

仮想化環境と接続クライアントの比較

  •  VMWare vSphere ESXi
    • 現在のバージョンは5.5、無償版がある
    • ハイパーバイザ型の仮想化環境で、GPU のパススルー、USB リダイレクションともに可
    • クライアント(vSphere client)が Windows 版のみ
  • XenServer
    • 現在のバージョンは6.2、無償版がある
    • 準仮想化であり、GPU のパススルー、USB リダイレクションともに可
    • クライアントが Windows 版のみ
  • KVM
    • Linuxのメインストリームに入っている仮想化環境
    • GPUのパススルー、クライアントからの USB リダイレクションともに可
    • クライアントは Windows, Linux。Mac では USB リダイレクションが使えない
      • Windows では使えるらしいけど、そのためには oVirt を構築しないとだめかも

仮想環境の選択

ESXi をインストールしようとしたらドライバがないのか NIC がないよって言われて動かせなかった。ドライバを追加して起動ディスク作るとかは面倒だったので、諦めて KVM を使うことにし、 CentOS7 をインストールした。

動かしてみた結果

PCのスペック不足が否めない。Core2Duo機を仮想環境として使うのはつらいっぽい。一応仮想化支援機能は入ってるけどね。

ホストのCentOS7のGUI(Gnome-shell)を動かすとこれがまた重くて、そんなんではVDIとしては使えないな、という感じ。

まだチューニングの余地はあると思うからもう少しいじってみよう。

追記

  • 仮想化ではなく、ネイティブでリモートデスクトップとして使うほうが使えそう。
  • GPU を挿したマシンだったけど、GPU が古くてプロプライエタリなドライバのサポート対象外になっていた。今度抜いて省電力化しよう。
  • ホスト OS のウィンドウマネージャを Gnome-shell から MATE に変えたらだいぶましになった。(2015年1月30日)

CentOS 6 での LDAP 設定

CentOS 6 での LDAP の設定方法についてまとめるつもりだったがまとめない。

目標

  • LDAPサーバを立ててクライアントから認証できるようにする
  • CentOS 6系から必須になったTLSでの認証を(簡単に)可能にする
    • 正式な証明書ではなく、ダミーの証明書を使う
  • sudo が使えるようにする

まじめにまとめようと思ったけど面倒になったのでポイントだけ

  • authconfigしたときに、sssdがインストールされていると、/etc/nsswitch.confにsssが指定される
  • sssはsssdによって認証されるが、TLSを要求するため、TLS接続できないとLDAPが引けなくなる。自己署名だとここで引っかかる。
  • sssdの設定を変更してTLS_REQCERTをallowとかにすると自己署名の証明書でもOKになる。実は自分で証明書を作る必要すらなく、openldapに同梱されているスクリプトで生成可能。
  • ldapsとstart_tlsは全くの別物。使うポートも違うということを理解する。
    • ちなみにldapsよりもstart_tlsのほうが推奨だそうな。
  • 他にも幾つかldap関連の設定ファイルがあるのでそれらを根こそぎ証明書のチェック結果を無視する設定に変更する

SoftEtherを使ってVPS上にVPNサーバを構築する

安価にもてるのであればVPN環境がほしかった。VPNにはいろいろあれど、SoftEtherというのがいろんなプロトコルに対応していてかつ簡単に構築できそうだったので、さくらVPS上にVPNサーバを構築してみた、という話。

個人用途におけるVPNを持つ目的

  • 公衆無線LAN等のネットワークを使いつつセキュアに通信したい
  • 外出時に自宅のネットワークにセキュアにアクセスしたい(リモートデスクトップ、ファイルサーバ等)
  • 拠点間をVPNでつなぎたい(自宅と実家等)
    • 実家環境のメンテナンスの容易化
    • (自宅よりも広い)実家にPCをおいてリモートデスクトップ

VPNを実現するために欲しいもの

  • 24時間365日安定稼動できて外からアクセス可能なVPNサーバ
    • 電気代、騒音、停電(ブレーカー断)、ポートフォワードとかめんどい・・・そこでVPS(月1000円以下)ですよ
    • Raspberry pi (3Wくらい?)でVPNサーバとかはちょっと興味あるけど。。
  • VPNサーバに参加可能なルータ
    • PC等をひとつずつ設定するのは面倒、NWプリンタ等VPNクライアント機能がない機器もつなぎたい
    • VPNクライアントの機能を持つルータは家庭用ではほとんどない、つまり高い
    • dd-wrt 使って家庭用ルータをVPNクライアントにしよう(一番安い)

SoftEtherを使ってみる

  • VPSにSoftEtherをインストール
    • OpenVPN互換機能を有効にしてクライアントからはOpenVPNのクライアントとしてつなぐ
    • このときdd-wrtでは圧縮がデフォルトでadaptiveに設定されているので注意
  • クライアントのつなぎ方
    • dd-wrt化したルータを用意
    • とりあえず同じ仮想Hubに全部つなげる(同じセグメントに見せたい)
    • ルータ以外の端末はtapでもtunでもあんまり関係ない模様
      • Android, iPhoneからはtunでしかつながらないらしい
      • Androidからつなぐ場合はOS標準のVPNよりも、OpenVPN Connectのほうが使い勝手が良い
    • ルータはtapでつなぐ
      • サンプルの設定とおなじになるようにdd-wrtに設定すればつながる。
      • tapをvlanにつなぐ
      • dd-wrtのdhcpサーバはオフにするのを忘れずに
  • GUIの設定ツールはWindows専用
    • Windows環境を持っていない場合はCUIのvpncmdだけでも十分設定可能
  • 性能をちゃんと出そうとするとSecureNATはなんだかんだ使えなかったのでDHCPサーバ、DNSサーバをVPSにインストール、iptablesでNATを設定。
    • 仮想HUBからtapデバイスを作成(これはVPS上で見える)、br0を手動で作成してvpnserverが起動した時に br0 と tap が接続されるように設定。ipアドレスは br0 に振る
    • 仮想DHCPサーバはMACアドレスによる固定割り当てができない
    • 仮想NATは性能が出ない
  • iptablesの設定
    • SNATとMASQUERADEが設定されてればOKっぽい。
    • lineのビデオ通話もできたしハッピー
  • dhcpdの設定
    • OpenVPNクライアントになってるルータに接続した機器のMACアドレスはそのままDHCPサーバに見えるので、IP固定等は機器自体のMACアドレスで設定できる
  • bindの設定
    • VPSが参照しているDNSにforwardするよう設定

参考

更新履歴

  • 2015年1月14日 – 表記を一部修正