渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

CentOS7インストールログ5:NICが2つついているマシンをルータにする

遥か昔に書いたSELinux6.5インストールログのつづき。漸く重い腰を上げて全部CentOS7にしたので備忘録。

管理しているのはCONDOR(いや、HTCondorという名前に変わったんだった)を走らせるためのジョブクラスタなので、CONDOR_MASTERを走らせるマシンにはNICが2つ乗っているマシンを使用し、ルータの機能を持たせてslaveマシンをその下にぶらさげたい。NICの名前をそれぞれem1, em2とする。

em1 -- XXX.XX.XX.XXX (global)
em2 -- 192.18.1.1/24

em1側にはグローバルIPを設定し、em2側はハブを通してslaveマシンが接続する。

なお、古い人間なのでfirewalldを使わないため、以下のおまじないが最初に必要。

# systemctl stop firewalld
# systemctl disable firewalld
# yum install iptables-services

このマシンにぶらさがるslaveマシンのiptables設定は以下の記事で。
Scientific Linux 6.3またはCentOS7インストールログ1:インストール - 渡米生活。(日記)


めんどうなのでGUIipアドレスをまず設定

em1側は普通にglobal addressの設定方法でよい
em2側は以下のとおり

ip_address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.1

DNS これはglobal側の設定と同じでもよし

IP フォワーディング設定

# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 0 > /proc/sys/net/ipv4/conf/em1/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/em2/rp_filter

下2行はCentOS7から有効になったスプーフィング対策フィルタを無効化する呪文。これをやらないとFORWARDが通らないそうな。

ここまでやっておいて、ip_tablesを書き換える。
ちなみに下のスクリプトは上の3行が埋め込んである。

#! /bin/sh

anyhost='0.0.0.0/0'
internal_ip='192.168.1.0/24'

my_global_ip=`ifconfig em1 | grep broadcast | awk '{print $2}' | sed -e 's/addr://'`
my_internal_ip=`ifconfig em2 | grep broadcast | awk '{print $2}' | sed -e 's/addr://'`


# trust all internal nodes
mu01='XXX.XXX.XXX.XXX'
mu02=XXX.XXX.XXX.XXX'

trusted="$mu01 $mu02"

# Make router function ON
echo 1 > /proc/sys/net/ipv4/ip_forward

# switch off spoofing filter
echo 0 > /proc/sys/net/ipv4/conf/em1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/em2/rp_filter


##############
#Flush & Reset
##############
iptables -F
iptables -t nat -F
iptables -X

##############
#Deafult Rule
##############

iptables -P INPUT DROP
#iptables -P INPUT ACCEPT

# allow established connection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

# accept all packets between internal addresses
iptables -A FORWARD -i em2 -o em1 -s $internal_ip -j ACCEPT
#iptables -A FORWARD -i em1 -o em2 -d $internal_ip -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


#-------------
# accept local
#-------------

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#---------------------------------------
# accept all packets from local machines
#---------------------------------------

/sbin/iptables -A INPUT -i em2 -s $internal_ip -j ACCEPT
/sbin/iptables -A OUTPUT -o em2 -d $internal_ip -j ACCEPT

for i in $trusted; do
  /sbin/iptables -A INPUT -i em1 -s $i -j ACCEPT
  /sbin/iptables -A OUTPUT -o em1 -d $i -j ACCEPT
done

#------------
# allow ping
#------------


# inbound
iptables -A INPUT -p icmp --icmp-type echo-request -d $my_internal_ip -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $my_internal_ip -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -d $my_global_ip -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $my_global_ip -j ACCEPT

# outbound
iptables -A OUTPUT -p icmp --icmp-type echo-request -s $my_internal_ip -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -d $my_internal_ip -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -s $my_global_ip -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -d $my_global_ip -j ACCEPT

#-------------------------------
# allow ssh
#-------------------------------

# inbound
iptables -A INPUT -p tcp -s $anyhost -d $my_internal_ip --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s $my_internal_ip -d $anyhost --sport 22 -j ACCEPT
iptables -A INPUT -p tcp -s $anyhost -d $my_global_ip --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s $my_global_ip -d $anyhost --sport 22 -j ACCEPT


# outbound
#/sbin/iptables -A INPUT -p tcp -s $anyhost -d $my_internal_ip --sport 22 -j ACCEPT
#/sbin/iptables -A OUTPUT -p tcp -s $my_internal_ip -d $anyhost --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s $anyhost -d $my_global_ip --sport 22 -j ACCEPT
#/sbin/iptables -A OUTPUT -p tcp -s $my_global_ip -d $anyhost --dport 22 -j ACCEPT

#------------
# allow DNS
#------------
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT


#################
#SNAT(masquerade)
#################
iptables -t nat -A POSTROUTING -o em1 -s $internal_ip -j MASQUERADE

################################################
#Outgoing packet should be real internet Address
################################################
iptables -A OUTPUT -o em1 -d 10.0.0.0/8 -j DROP
iptables -A OUTPUT -o em1 -d 176.16.0.0/12 -j DROP
iptables -A OUTPUT -o em1 -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -o em1 -d 127.0.0.0/8 -j DROP

#########
#logging
#########
iptables -N LOGGING
iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING
iptables -A FORWARD -j LOGGING

/sbin/service iptables save

MacBook proがいきなりネットワーク(wifi, 有線)に繋がらなくなった話

昨晩MacPRAMクリアをして、本日職場にMacBook pro Retina, 15-inch, Mid 2015(システムMacOS Mojave 10.14.6)を持ってきたら、いきなり全てのインターネット接続が死にました。wifiも、有線もつながらない!

しかし、iPhoneは繋がるので、MacBookの問題であることは間違いない。wifiだけでなく、USBやthunderbolt3ポートを経由した有線接続もダメとなると、ハードよりソフトの問題である可能性が高い…

いや、この忙しいときに、まさかのシステムクリーンインストール?!

と絶望しかけましたが、もうちょっと粘ってみようと思い、optionキーを押しながらWiFiマークをクリックして”ワイヤレス診断”を選び、レポートを作成しました。

すると、こんなことをおっしゃる。

f:id:lilylila:20191227071148p:plain

最初3つはともかく、国別コードってなんだ?!

f:id:lilylila:20191227071414p:plain

以下一部掲載。

国別コードが競合しています

近隣で検出されたワイヤレスルータの中に、現在の設定と競合する国の製品と識別されたものがあります。このため、以前に接続したWi-Fiネットワークに自動的に再接続できない可能性があります。

一部のワイヤレスルータは、国コードによって、どの国で動作するかを識別するように設計されています。ワイヤレスルータは最初に購入した国でのみ使用してください。それ以外の国で使用した場合、近隣のワイヤレスクライアントでパフォーマンスや信頼戦の問題が発生する可能性があります。

可能な場合は、ネットワーク所有者に問い合わせてこの問題を解決してください。

また、現在地に基づいて正しい国別コードが採用されるように、Macで位置情報サービスがオンになっていることを確認してください。

以下の付近のネットワークが、現在の国コードと競合しています(x0):

.....

現在の国コード(x0) ってのが、めっちゃ怪しい!!
おそらく、今このMacは、どこの国のものでもないことになっているのではなかろうか。
ここはアメリカなので、周辺のワイヤレス機器の国コードはもちろんUSです。

ってか、だとしたら、Macって位置情報サービスがオンになってないと、ワイヤレスルータには繋げないのか?!
(位置情報サービスはオプションだから、手動でオフにすることは可能だけど、それやったらそのへんのwifiにはつながらないかもよ、って話なの?!)

しかし、いくら位置情報サービスがオンになっていても、まずはネットに繋がらないと、その情報は送信されないのである。。
とりあえず、日付と時刻パネルで、正しい場所と時間帯が設定されているか確認しよう、と思ったところで、いきなりWIFI開通しました…。有線も繋いだままだったので、どちらが先に開通したのかは不明。


と、まあ、ここまで書いてきて、結局原因わからんのかい、というしょーもないオチなんですが、PRAMクリア後にもしかすると位置情報がゼロクリアされて、次に正しく設定されるまではwifi使えないかも、という備忘録として残しておきます。
以前だったら、こういう怪しいことがおきると真っ先に内蔵電池を疑ったんですが、このモデルはたぶん内蔵電池ないやつだしなあ。
(ちなみに電池残量は十分にあった)

App Storeで配布終了してダウンロードできなくなったアプリから.ipaファイルを作成して他のiPhoneへインストールする(制限あり)

本当はやっちゃいけないんだろうけど、iphoneのイヤホンジャックにつけてペットなどの体温を測れるwishboneのアプリが突然App Storeからダウンロードできなくなり、大変困ったので、ギリギリ1端末にだけ落としておいたAppを別の端末にもコピーしてインストールした備忘録。

必要なもの
  • アプリのコピー元の端末
  • アプリのコピー先の端末
  • iMazingをインストールできるMacWindows PC(ただしWindows PCでは動作未確認)

※ちなみに、これは、不特定多数の人にiphoneにすでにインストールされたアプリのコピーをバラまける方法ではありません。アプリ使用時にコピー元のAppleIDとパスワードを求められます。あくまで、自分の2台目端末に入れたいが、バックアップからの復元でインストールしてしまうと2台目端末にもとから入っていたものが全部消されてしまうので困った! というような場合の緊急対処です。

続きを読む

SVNユーザーのGitHub初心者メモ:他人のプロジェクトに手を加える場合(フォーク&プルリクエスト)

GitHub初心者でいろいろやらかしたので忘備録。
人様のプロジェクトに手を加えたいときにどうするか。

想定されるケースとして、

  • バグを見つけたのでバグフィックス依頼(プルリクエスト, pull request)を送りたい
  • 機能が足りないので自分用に新しい関数を足したい(オリジナルの作者へのマージ依頼は送らない)

の2種類があるけど、それぞれに別の手順を覚えておけるほどの脳味噌はないので、ほとんど同じにしてプルリクエストを送るかどうかだけが違う方法1つだけ覚えることにする。

※以下のサイトの方が図入りで判りやすいです。
Github で Fork してから Pull Request をするまでの流れ | けーこ in サンフランシスコ

  • 最初に1度だけやればいい作業
    • もとにしたいプロジェクトをForkする。
    • 本家プロジェクトとの関連づけを行う
    • Developブランチを作る
  • 何か変更したい都度にやる作業
    • まず、本家のmasterと分家(自分がforkしたもの)のmasterを一致させる
    • その変更専用のブランチを切って、ファイルに変更を加える。または、既存のブランチに最新のマスターをマージ。
    • 動作確認
    • 変更したファイルをadd
    • 変更のコミットとリモートサーバへの書き込み
    • プルリクエストの送信
    • プルリクエストを削除する(取り下げる)
    • プルリクエストが反映されたあとの作業
続きを読む

ASUS Z10PE-D8 WS にビデオカードを刺してCUDA8を動かす

ASUS Z10-PE-D8 WS が4枚グラフィックカードを挿せるというので、ただいま奮闘中。

以下、構成です。

1)BIOS設定でメインのVIDEO出力をonboardに変更。

これ、デフォルトでそうなっている、とマニュアルには書いてあるのに、そうなっていなかった…。
カード挿すとQ-Codeが62番を刺して「ピー」とか音がして起動が止まってしまうので、何が悪いのかとマザーボードを箱から出してみたり、奮闘2時間。もしやと思ってBIOSをチェックしたらいつのまにかoffboard deviceになってる…。

BIOSからIntelRCSetup→Miscellaneous Configuration→Active Videoで設定。

2)ドライバとCUDAのインストール

前の記事では.runファイルを使う方法で紹介したのだけれど、ELrepoを使うとrpmで簡単に入るのでそれでやってみる。

nouveauを無効化するところまでは前の記事と同じなので省略。


1) ELrepo をインストール

ELrepoの中のnvidia-detectがドライバを選んでくれるのだけれど、そのためにはまずelrepoをrpmにインポートする必要がある。

$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ sudo rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
$ sudo yum install nvidia-detect

2)cuda RPMをとってくる。

RPMの場合、cudaをインストールしたら勝手にドライバもいれてくれる。
現時点での最新はCUDA8.0なので、nvidiaのホームページに行ってCUDAのrpmをとってくる。

NVIDIAのウェブサイトにある基本コマンドは以下のとおり。

$ sudo rpm -i cuda-repo-rhel6-8-0-local-ga2-8.0.61-1.x86_64.rpm
$ sudo yum clean all
$ sudo yum install cuda

しかし、SL6.Xにこれをやると、以下のエラーが出る。

Requires: libvdpau(x86-32) >= 0.5 

どうしたものかと思ったら、以下のサイトに解決法が書いてありました。ありがたや!

Scientific Linux 6でCUDA: satok weblog

転載すると、

1 /etc/yum.repos.d/linuxtech.repo と言うファイルを作成
[linuxtech]
name=LinuxTECH
baseurl=http://pkgrepo.linuxtech.net/el6/release/
enabled=1
gpgcheck=1
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET

2 以下のコマンドを実行
# yum install libvdpau

とのこと。たしかに、これでyum installが通るようになりました。

3)テスト

CUDA8.0では、テストプログラムのインストール スクリプトが用意されている。
コンパイルしてdeviceQueryを走らせてみる。

$ /usr/local/cuda-8.0/bin/cuda-install-samples-8.0.sh ~ 
$ cd ~/NVIDIA_CUDA-8.0_Samples/
$ make
$ bin/x86_64/linux/release/deviceQuery

すると、一応走るのだけど、GTX 1080だけこんなエラーが。

MapSMtoCores for SM 6.1 is undefined. Default to use 128 Cores/SM

なんか、せっかくのGTX 1080が遅くなっているような感じ?
で、このメッセージで検索をかけてみると、どうやらcuDNN とかいうライブラリが古いらしい

GTX 1080はPascalなので、cuDNNはバージョン5以上を使わなければダメ、とCUDAのdeveloper pageに書いてあるのだそうな。

というわけで、cuDNNのアップグレードの方法を探したら、これまたすでに解決されている方がおられました!

CUDA 8.0とcuDNN 5.1をUbuntu 16.04LTSにインストールする - Qiita

Ubuntsuについてのページですが、cuDNNのインストールの部分はまったく同じです。
これも一応転載しておきます。

https://developer.nvidia.com/rdp/cudnn-download からcuDNN 5.1 for CUDA 8.0をダウンロードする(アクセスするにはメンバー登録が必要)。 ダウンロードしたフォルダで以下のコマンドを実行して、cuDNNのライブラリをCUDAがインストールされているディレクトリにコピーする。シンボリックリンクシンボリックリンクとしてコピーされるように cp には -a をつける必要がある。

terminal
tar xzvf cudnn-8.0-linux-x64-v5.1.tgz 
sudo cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/
sudo cp -a cuda/include/* /usr/local/cuda-8.0/include/
sudo ldconfig

ちなみに私はcuDNN 6.0 for CUDA 8.0をとってきましたが、問題なく動きました。

ところで、消費電力大丈夫??

実は、いい加減な計算しかしていなかったもので、、電源が4枚挿しに耐え切れるかわからないのでした(汗)

ざっくり計算すると、グラボ1枚につき225W。CPUは1個あたり75W。マザーボードがどれだけ電気食うかわからないけど、まあ1500Wの電源ならギリ大丈夫、、かな?(^^;)

こんなサイトもあるそうです。。

電源容量 ☆ 皮算用 ☆ 計算機。

エックスサーバ間の独自ドメイン引っ越しログ

先日、エックスサーバの落とし穴というタイトルで、エックスサーバ間の独自ドメインホームページの引っ越しが大変だ、という話をしたのですが。

(大変というか、どうしても一時ドメインが繋がらなくなる時間ができてしまう、という仕様になっている)

 

とはいえ、もう新サーバの契約をしてしまったので、独自ドメインが一時不通になるのを覚悟で、エックスサーバ間のワードプレスホームページの引っ越しをやってみました。

結論をいうと、覚悟していたよりはかなりスムーズに移行できました。

以下、その方法です。

 

続きを読む

エックスサーバの落とし穴

ウェブ上ではどこを見てもいいサーバだと高評価が並んでいるエックスサーバですが、、、


本日とんでもない不便が発覚。

 

なんと、エックスサーバ同士の独自ドメインを用いたウェブサイトのサーバ間引っ越しがシームレスにできない!
そんなアホなことがあるか、と思って、サポートに問い合わせたら、方法はない、シームレスに移行したかったら一度外部のホスティングサービスに移って、それからまたエックスサーバに戻ってこいとのお言葉。

 

もちろん、独自ドメインにくっついてるメアドも同様に二段階引っ越しが必要。

やってられるかーーー!!!(怒)

共用サーバなんで、どうしても同居者との相性があります。
実際私が使ってるサーバも、頻繁にwordpressの「更新」ボタンを押すとぐるぐるカーソルが回っちゃってせっかくの変更が全部消える、ということが起きたので、この際別サーバに引っ越ししてみようか、とアカウントを取り直し、引っ越ししようとしたらコレですわ…(脱力)

まあ、そういうことがなくても、複数の独自ドメインを同じサーバで運用していて、やっぱりあとで別サーバに分けたい、とか、いろいろドメインの引っ越しが必要になる場面はあるわけで。

 
昔使っていたcoreserverxreaではもちろん簡単にそれができたので、当然エックスサーバもそうだろうと思っていたら、「できない」とのご返答だったわけです。

どういうことかというと、エックスサーバのドメイン設定は、厳密にエックスサーバの内部のサーバ一つにしか設定できないのです。

本来、各サーバのドメイン設定は重複していても(つまり複数サーバにexample.comドメイン設定があったとしても)、DNSサーバがそのうちのどれかひとつのサーバを指してさえいれば、事実上問題はないはずなんですが。

まあ、長期的には気持ちわるいかもしれんが、1週間やそこらで問題になるとは思えないので、引っ越し時限定で重複設定を許せばいい話なんじゃないか、と思う。

しかし、エックスサーバではそれは許してくれないので、新サーバにドメインを設定したければ、まず旧サーバのドメイン設定を削除しなくてはならない。
で、オソロシイことに、このドメイン設定を削除すると、サポートの言葉を借りるに、

ドメインの設定削除を行いますと、 メールアカウントを含むホームページ構成ファイルなど、 該当ドメインに関する【全て】のデータがサーバー上から 削除されてしまいますのでご注意ください。   

 というわけで、全部ファイル消されちゃうんですよ!!

つまり、旧サーバのファイルやwordpressのデータベースを全部ローカルに保存したとしても、新サーバにアップロードおよび設定が完了するまで、ウェブサイトが見れないのはもちろん、メールすら迷子になってしまうというありさま。
何らかの原因で引っ越しに失敗しても、もはや旧サーバに戻ることもできないのです。

しかも、こうやって旧サーバの設定を削除しない限り、新サーバでドメインの設定ができず、それができないうちは、ホームページ領域にアクセスする方法もなければ、メールの設定もできない。

 

さらに、DNSの変更がいきわたるまで最大24時間と思うと、その間、もしかしたら古いDNSを見たユーザはすでにホームページが消えちゃってる旧サーバを見にいっちゃって、「ファイルが存在しません」とか怪しいページが表示されてしまうわけですよね?
だって、サブドメイン用のディレクトリごと消す、っていってるんだから、「ただいま工事中」の簡単なhtmlファイルすら置けないわけですよ。

こんな怖い仕様のサーバありなの?! と私は思うんだけど、そういうもんなんですか?
ずっとxreacoreserverしかいじってなかったから、サーバー引っ越しなんてシームレスに出来るのが当たり前だと思ってたよ!!!

 

確かにエックスサーバはそこそこ安定してるかもだけど、ワードプレスの更新ボタンでぐるぐるカーソル回っちゃって変更全部消えたとか、コアサーバ時代はなかったし。
不安定になったらいつでもサーバのりかえられたし。
それとも、企業のウェブサイトなんかは、夜中に「メンテナンス中です」とか出して作業するから、シームレスでなくても構わないってことなんでしょうか。

ちょっとコアサーバから引っ越したのは早まったかも…。

3/28追記

結局引っ越ししてみました。思ったよりはスムーズでした。

エックスサーバ間の独自ドメイン引っ越しログ - 渡米生活。(日記)