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:インストール - 渡米生活。(日記)
めんどうなのでGUIでipアドレスをまず設定
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, 有線)に繋がらなくなった話
昨晩MacのPRAMクリアをして、本日職場にMacBook pro Retina, 15-inch, Mid 2015(システムMacOS Mojave 10.14.6)を持ってきたら、いきなり全てのインターネット接続が死にました。wifiも、有線もつながらない!
しかし、iPhoneは繋がるので、MacBookの問題であることは間違いない。wifiだけでなく、USBやthunderbolt3ポートを経由した有線接続もダメとなると、ハードよりソフトの問題である可能性が高い…
いや、この忙しいときに、まさかのシステムクリーンインストール?!
と絶望しかけましたが、もうちょっと粘ってみようと思い、optionキーを押しながらWiFiマークをクリックして”ワイヤレス診断”を選び、レポートを作成しました。
すると、こんなことをおっしゃる。
最初3つはともかく、国別コードってなんだ?!
以下一部掲載。
国別コードが競合しています
近隣で検出されたワイヤレスルータの中に、現在の設定と競合する国の製品と識別されたものがあります。このため、以前に接続したWi-Fiネットワークに自動的に再接続できない可能性があります。
一部のワイヤレスルータは、国コードによって、どの国で動作するかを識別するように設計されています。ワイヤレスルータは最初に購入した国でのみ使用してください。それ以外の国で使用した場合、近隣のワイヤレスクライアントでパフォーマンスや信頼戦の問題が発生する可能性があります。
可能な場合は、ネットワーク所有者に問い合わせてこの問題を解決してください。
また、現在地に基づいて正しい国別コードが採用されるように、Macで位置情報サービスがオンになっていることを確認してください。
以下の付近のネットワークが、現在の国コードと競合しています(x0):
.....
現在の国コード(x0) ってのが、めっちゃ怪しい!!
おそらく、今このMacは、どこの国のものでもないことになっているのではなかろうか。
ここはアメリカなので、周辺のワイヤレス機器の国コードはもちろんUSです。
ってか、だとしたら、Macって位置情報サービスがオンになってないと、ワイヤレスルータには繋げないのか?!
(位置情報サービスはオプションだから、手動でオフにすることは可能だけど、それやったらそのへんのwifiにはつながらないかもよ、って話なの?!)
しかし、いくら位置情報サービスがオンになっていても、まずはネットに繋がらないと、その情報は送信されないのである。。
とりあえず、日付と時刻パネルで、正しい場所と時間帯が設定されているか確認しよう、と思ったところで、いきなりWIFI開通しました…。有線も繋いだままだったので、どちらが先に開通したのかは不明。
と、まあ、ここまで書いてきて、結局原因わからんのかい、というしょーもないオチなんですが、PRAMクリア後にもしかすると位置情報がゼロクリアされて、次に正しく設定されるまではwifi使えないかも、という備忘録として残しておきます。
以前だったら、こういう怪しいことがおきると真っ先に内蔵電池を疑ったんですが、このモデルはたぶん内蔵電池ないやつだしなあ。
(ちなみに電池残量は十分にあった)
App Storeで配布終了してダウンロードできなくなったアプリから.ipaファイルを作成して他のiPhoneへインストールする(制限あり)
本当はやっちゃいけないんだろうけど、iphoneのイヤホンジャックにつけてペットなどの体温を測れるwishboneのアプリが突然App Storeからダウンロードできなくなり、大変困ったので、ギリギリ1端末にだけ落としておいたAppを別の端末にもコピーしてインストールした備忘録。
必要なもの
※ちなみに、これは、不特定多数の人にiphoneにすでにインストールされたアプリのコピーをバラまける方法ではありません。アプリ使用時にコピー元のAppleIDとパスワードを求められます。あくまで、自分の2台目端末に入れたいが、バックアップからの復元でインストールしてしまうと2台目端末にもとから入っていたものが全部消されてしまうので困った! というような場合の緊急対処です。
続きを読むSVNユーザーのGitHub初心者メモ:他人のプロジェクトに手を加える場合(フォーク&プルリクエスト)
GitHub初心者でいろいろやらかしたので忘備録。
人様のプロジェクトに手を加えたいときにどうするか。
想定されるケースとして、
の2種類があるけど、それぞれに別の手順を覚えておけるほどの脳味噌はないので、ほとんど同じにしてプルリクエストを送るかどうかだけが違う方法1つだけ覚えることにする。
※以下のサイトの方が図入りで判りやすいです。
Github で Fork してから Pull Request をするまでの流れ | けーこ in サンフランシスコ
- 最初に1度だけやればいい作業
- もとにしたいプロジェクトをForkする。
- 本家プロジェクトとの関連づけを行う
- Developブランチを作る
- 何か変更したい都度にやる作業
ASUS Z10PE-D8 WS にビデオカードを刺してCUDA8を動かす
ASUS Z10-PE-D8 WS が4枚グラフィックカードを挿せるというので、ただいま奮闘中。
以下、構成です。
- マザーボード
- ASUS Z20-PE-D8 WS
- CPU
- 電源
- CORSAIR AX1500i
- グラフィックカード
- システム
- Scientific Linux 6.8
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.NET2 以下のコマンドを実行
# 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の「更新」ボタンを押すとぐるぐるカーソルが回っちゃってせっかくの変更が全部消える、ということが起きたので、この際別サーバに引っ越ししてみようか、とアカウントを取り直し、引っ越ししようとしたらコレですわ…(脱力)
まあ、そういうことがなくても、複数の独自ドメインを同じサーバで運用していて、やっぱりあとで別サーバに分けたい、とか、いろいろドメインの引っ越しが必要になる場面はあるわけで。
昔使っていたcoreserverやxreaではもちろん簡単にそれができたので、当然エックスサーバもそうだろうと思っていたら、「できない」とのご返答だったわけです。
どういうことかというと、エックスサーバのドメイン設定は、厳密にエックスサーバの内部のサーバ一つにしか設定できないのです。
本来、各サーバのドメイン設定は重複していても(つまり複数サーバにexample.comのドメイン設定があったとしても)、DNSサーバがそのうちのどれかひとつのサーバを指してさえいれば、事実上問題はないはずなんですが。
まあ、長期的には気持ちわるいかもしれんが、1週間やそこらで問題になるとは思えないので、引っ越し時限定で重複設定を許せばいい話なんじゃないか、と思う。
しかし、エックスサーバではそれは許してくれないので、新サーバにドメインを設定したければ、まず旧サーバのドメイン設定を削除しなくてはならない。
で、オソロシイことに、このドメイン設定を削除すると、サポートの言葉を借りるに、
ドメインの設定削除を行いますと、 メールアカウントを含むホームページ構成ファイルなど、 該当ドメインに関する【全て】のデータがサーバー上から 削除されてしまいますのでご注意ください。
というわけで、全部ファイル消されちゃうんですよ!!
つまり、旧サーバのファイルやwordpressのデータベースを全部ローカルに保存したとしても、新サーバにアップロードおよび設定が完了するまで、ウェブサイトが見れないのはもちろん、メールすら迷子になってしまうというありさま。
何らかの原因で引っ越しに失敗しても、もはや旧サーバに戻ることもできないのです。
しかも、こうやって旧サーバの設定を削除しない限り、新サーバでドメインの設定ができず、それができないうちは、ホームページ領域にアクセスする方法もなければ、メールの設定もできない。
さらに、DNSの変更がいきわたるまで最大24時間と思うと、その間、もしかしたら古いDNSを見たユーザはすでにホームページが消えちゃってる旧サーバを見にいっちゃって、「ファイルが存在しません」とか怪しいページが表示されてしまうわけですよね?
だって、サブドメイン用のディレクトリごと消す、っていってるんだから、「ただいま工事中」の簡単なhtmlファイルすら置けないわけですよ。
こんな怖い仕様のサーバありなの?! と私は思うんだけど、そういうもんなんですか?
ずっとxreaとcoreserverしかいじってなかったから、サーバー引っ越しなんてシームレスに出来るのが当たり前だと思ってたよ!!!
確かにエックスサーバはそこそこ安定してるかもだけど、ワードプレスの更新ボタンでぐるぐるカーソル回っちゃって変更全部消えたとか、コアサーバ時代はなかったし。
不安定になったらいつでもサーバのりかえられたし。
それとも、企業のウェブサイトなんかは、夜中に「メンテナンス中です」とか出して作業するから、シームレスでなくても構わないってことなんでしょうか。
ちょっとコアサーバから引っ越したのは早まったかも…。
3/28追記
結局引っ越ししてみました。思ったよりはスムーズでした。
エックスサーバ間の独自ドメイン引っ越しログ - 渡米生活。(日記)