このイベントの対象がディレクトリである。監視対象オブジェクトを含むファイルシステムがアンマウントされた。イベントを識別するためのビットマスクである。メタデータが変更された。書き込みのためにオープンされたファイルがクローズされた。書き込み以外のためにオープンされたファイルがクローズされた。監視対象ディレクトリ内でファイルやディレクトリが作成された。監視対象ディレクトリ内でファイルやディレクトリが削除された。監視対象のディレクトリまたはファイル自身が削除された。ファイルが修正された。監視対象のディレクトリまたはファイル自身が移動された。ファイルが監視対象ディレクトリ外へ移動された。ファイルが監視対象ディレクトリ内へ移動された。ファイルがオープンされた。そのディレクトリ内のファイルに対して発生する。nameフィールドは、ディレクトリ内のファイル名を表す。マクロは上記のイベント全てのマスクとして定義される。mask引き数として使える。つの便利なマクロがある。pathnameがシンボリックリンクである場合に辿らない。以降)デフォルトでは、あるディレクトリの子ファイルに関するイベントを監視(watch)した際、ディレクトリからその子ファイルが削除(unlink)された場合であってもその子ファイルに対してイベントが生成される。このことは、アプリケーションによってはあまり興味のないイベントが大量に発生することにつながる(例えば、/tmpを監視している場合、たくさんのアプリケーションが、すぐにその名前が削除される一時ファイルをそのディレクトリに作成する)。IN_EXCL_UNLINKを指定するとこのデフォルトの動作を変更でき、監視対象のディレクトリから子ファイルが削除された後に子ファイルに関するイベントが生成されなくなる。監視し、イベントが発生したら監視対象リストから削除する。ディレクトリの場合にのみ監視する。(ファイルの削除、またはファイルシステムのアンマウントにより)自動的に削除された。このイベントの対象がディレクトリである。監視対象オブジェクトを含むファイルシステムがアンマウントされた。サンプルコードここで示すサンプルコードでは、指定したディレクトリ内に含まれるファイルもしくはディレクトリ移動した場合にイベントが発生します。サンプルコードを以下に記します。rec=True)asyncore.loop()syslog.closelog()maskにpyinotify.IN_MOVED_TOを指定することで、ファイル/ディレクトリの移動を監視しています。IN_MOVED_TOをIN_CREATEにすれば、ファイル/ディレクトリが生成されたタイミングでイベントが発生します。ディレクトリを指定した場合には、対象ディレクトリ以下のサブディレクトリも監視対象となります。監視中(プログラム起動後)に新たに設置されたフォルダー内部は監視対象にならないということに注意が必要です。syslogにログを残す機能も併せて盛り込んでしまいました。inotifyファイル監視LinuxscpでIDとパスワードを自動入力させる方法(expect)。主様コメントするexpectを利用して、sshやscpにおけるIDとパスワードを自動入力させる方法は、いろいろなサイトで公開されています。今回、この記事を記載した理由は「password:」で止まってしまう現象が発生しました。多くのサイトで記載されている方法では、この「password:」で止まってしまう現象を回避出来なかったため、その方法を記載します。実際に使用したコマンドは以下の通りです。exit"a.txtファイルを127.0.0.1のサーバ(今回は自分自身のサーバ)にあるuserというユーザの/home/userディレクトへコピーしています。パスワードは「passwd」なのですが、その後ろに「\r」を追加することが肝でした。これにたどり着くまでが長かった。(^^ゞでもこれで問題なく解決しました。環境によって、この「\r」が必要ではない場合もあると思いますが、一応これも方法の一つと考えていただければ幸いです。主様コメントするセキュリティの観点から、ポートフォワーディングを行いたい時があります。サーバ側でポートを変更する対策も考えられるところなのですが、イントラ環境ではデフォルトポートで、外部とはポートフォワーディングしたいという時があります。いう時は、ルータでポートフォワーディングすることもありますが、今回はUTM(FortiGate)側で対応を行います。「ポリシー&オブジェクト」→「バーチャルIP」で、バーチャルIPを編集します。「ポートフォワード」を有効にします。「Externalサービスポート」に外部からアクセスするポート番号を指定します。「ポートへマップ」にフォワードする先のポート番号を指定します。WebGLdeck.glをCentOSで動かしてみる。主様コメントするはじめに野暮用でビックデータを可視化することになってしまい、今迄はOpenLayersをゴリゴリっとしてたのですが、MVT使っても厳しかろうというところから、WebGL関連で可視化を目指すことにしました。何にしようかと考えていたところ、UBER社が提供しているdeck.glが気になり、チョロッとお試しをdeck.glがベースとなっているkepler.glでやってみたところ、ええ感じで動くじゃないですか!そんじゃあ、deck.glで実装決定!ということから、まずはdeck.glの環境構築に取りかかりました。kepler.glについては、何かの機会にお話するとして(某ローカルコミュニティで発表予定)、今回はdeck.glの実装のみのお話を簡単に記録します。7上で実装することにしました。8で実装したとしても何も異る点は無いはずです。理由は、実相はnode.js上で行うため、node.jsの実装方法自体が変わらない限り変更は無いということです。参考にさせて頂いたサイトはこちらになります。https://qiita.com/keijipoon/items/92d9551930fe52d6c90aそろそろ、この手の記事をQiitaに書いた方が楽なんじゃないか?とか、そっちの方が見てもらえるんじゃないかとか思ってはいるのですが、趣味なんです(^^;node.jsのインストールnode.jsのインストールは先日こちらの記事に記していますので、そのまんま実装しました。言うことで、参照してください。node.jsを既にインストールされている方は、無視して次の作業を行ってください。luma.glをインストールコマンドライン上で以下のコマンドを実行します。luma.gl終わりです。deck.glのインストールこちらのサイトからダウンロードしてきます。deck.glのインストールと言っても、取り敢えずダウンロードして、展開するだけです。https://github.com/uber/deck.gl適当なフォルダへ解凍します。サンプルプログラムを動かしてみる。なんか既にインストール終わっているみたいです。サンプルプログラムを幾つか試しに動かしてみようと思ったのですが(2分程)、実際に動くのは参考にさせて頂いたサイトでも紹介されていたサンプルだけでした。いうことで、ほぼ同じ感じの内容ですが、以下のフォルダへ移動します。(解凍したdeck.glの中にあります。/xxxxx/deck.gl/deck.gl-master/examples/website/3d-heatmap後は、そのまんま実行するだけ。start終わりです。環境さえ整っていれば、Windowsで実装するのと何も変わりませんでした。未分類node.jsをインストールすることから始めます。主様コメントする今回は、node.jsをインストールすることが目的ではないのですが、この後に書く予定のdeck.glをインストールするために、node.jsをインストールする必要が生じたため、手順を踏んで記録に残すことにしました。node.jsのリポジトリを登録する。7上に環境を構築します。以下のサイトを開いて、最新版を確認します。https://github.com/nodesource/distributions/tree/master/rpm執筆時点では、setup_12.xが最新版でした。最新版をインストールするため、以下のコマンドを実行します。-これで、基本的なインストールは完了です。実は、過去にnode.jsをインストールしていたマシンだったので、こんなメッセージが表示されました。npm」ということで、削除します。npmその後の情報も確認しつつ、node.jsのパッケージをインストールします。nodejsこれで完了です。バージョン確認を実施し、最新版のnode.jsがインストールされていることを確認しましょう。-vv12.10.0無事インストールが完了しておりましたので、今回はここまでとなります。主様2件のコメント2019年5月7日にRHELがリリースされてからもうすぐ100日が経過しようとしている。8がリリースされました!これで使えるようになりますが...問題は、VirtualBoxでGUIを含む状態でインストールする場合には、問題があるようです。7)から気にはなっていたのですが、基地の問題として残っているようです。仮想マシンとして考えている方で条件が合致される場合は、他の仮想か技術を考えた方が良いかも知れませんね。GUI」/「サーバ(GUI)」を選択してインストールするとGUIが立ち上がらない障害がある様です。詳しくは以下のサイトをご参照下さい。https://wiki.centos.org/ja/Manuals/ReleaseNotes/CentOS8.1905#head-9ed7a1765d703716a543781d18c13e50868f0516と言いつつ、読んでみてもよく解らなかったので調べてみることにしたら、こちらの記事が解り易かった。GUI」もしくは「サーバー(GUI)」を選択してインストールすると既知の問題に遭遇するらしい。インストーラのバグか?という感じですが、原因までは調べていません。「ワークステーション」を選択してインストールする分には問題が無いようなので、GUIを使いたい場合には別の選択肢を関g萎えた方が良さそうですね。<2019-09-23追記>なんか、明日(2019-09-24)にリリースされるそうです。9月に入ってからのダタバタ劇はなんだったのか?踊らされていたのか?とにかく、現地時間の明日にはリリースされるとのこと、期待して待ちましょう。時点でまだリリースされていません。※2019-09-15時点でまだリリースされていません。※2019-09-23時点でまだリリースされていません。7.1909の更新準備が先行されているのですが、wikiを見てみると約1ヶ月くらい掛かるみたいです。10月以降にならないと開発は再開される見込みは無さそうですね。Linuxは8以降のリリースを行わないとの表明が行われていますね。Linuxは少し違いますよね。8は7/18にリリースされました。CentOSはまだ少し掛かりそうです。進捗状況は以下のURLで公開されています。https://wiki.centos.org/About/Building_8もうカウントダウンですねw8/15にボストン大学でDevConfが開催されるので、その頃にはRC版が出てくれそうな感じかな?残念ながら発表はありませんでしたね(^^ゞ9/10に動きがありました。7.7がリリースされるそうです。そのため、8の開発が停止してしまいました。!と思ったら、まだ先になりそうです。首を長くして待ってます。正式リリースが待ち遠しいですが、更にクラウド(VPSなど)で使えるようになるには、まだまだ時間が掛かりそうな雰囲気です。リリースされたら、インストール方法などをまとめたいと思っています。15:50頃でも、ここまで来ると本当に「あと少し!」って感じですね。早ければ明日にもリリースか?とか期待してしまいますが、土日は進捗が止まっているので、来週8/21辺りが最短リリースじゃないかな?と、期待してます(#^.^#)さてさて、まだまだリリースされる感じがしない。8/20から全く更新する気配すら感じられなくなりました。オープンソースカンファレンスの影響だろうか?ここまで来たら、来月中にはリリースされるでしょう。CentOSのサイトでは、「いつリリースされるの?」というコメントが出ていたり、首を長くして待っている人がいらっしゃいますね。ほとんどの作業は済んでいるはずなので、最後の詰めがしっかりされて発表して頂ければと思います。期待して待ちましょう。8.https://wiki.centos.org/About/Building_89/10時点で7.7のリリース作業のため、8の作業が停止してしまいました。主様コメントするPHPがアップデートできない!※この事例は、remiリポジトリを使用しています。PHP71を対象としています。remiリポジトリを使っていない場合は参考にならないかも知れません。PHP71以外のバージョンでは適宜コマンドの指定を変えてください。updateを実施しようとしたら、アップデートが出来ませんでした。手動でPHP以外のアップデートを済ませて再度確認を行った結果、以下のエラーが原因でした。--nodigest当然、–skip-brokenとかやる気は全く無いので、ググってみると同様の現象に見舞われている方を発見!そのQAに書かれている内容を見て何となく方向性は判ったのだが、どうも気に掛かる。1個足りない気がする。危なっかしいので、万が一のことを想定しスナップショット(バックアップ)を取得してから以下の手順を順次実施した。アップデート手順まずは、障害を取り除くまず最初にエラーメッセージ記載されているパッケージを以下のコマンドで削除する。Removedの項目にも書かれているが、phpMyAdminもトランザクションの影響で削除されている。-yオプションは避けた方が良いだろう。必要なパッケージを再度インストールして更新する。参考にしたサイトに記載されていた内容でインストールしてみた。その手順が以下になる。0:4.3.2-1.el7.remiComplete!やっぱり、phpMyAdminがインストールされていない!phpMyAdminを明示的に入れる必要があるわけで、以下のコマンドでインストールを行う。0:4.9.0.1-1.el7.remiComplete!無事入りました!ちなみに、こちらはremiを使ってPHP71の事例となっていますが、その他のバージョンに関しては適宜バージョン指定を変えてくださいね。主様コメントする※本記事は執筆中であり、一部正確ではない部分があります。7にメールサーバを構築します。8でも同じ感じで設定できるでしょう(^^;インターネット上を散策すると、私を含めて色々な方がインストール方法をブログなどに掲載されていますが、簡単なインストール方法は分かるんだけど、実はファイアーウォールが無視されていたり。SELinuxを無効にするとか。それって良いの?という感じになったり、少し不安がよぎります。そんなことがあって、自分に合った記事を見つけるのは意外と大変なんですよね。いうことで、この記事も私に合った記事になっていますので、参考にされる方はご自身の環境に合うか合わないかを判断した上で考えてみてください。本記事では、メールサーバのインストールを何とか使えるレベルから少し踏み込んでセキュリティ対策も考えた状態までもって行こうと思っています。それと合わせて、少しだけですけどデフォルトよりも少しパフォーマンスを上げてみようと思います。最初に、本記事で紹介するメールサーバでは、postfixとdovecotを採用することにしました。他のsendmailを使う方などは対象外になります。dovecotインストール前の準備メールサーバを立ち上げようなんて考えている方はご存知とは思いますが、DNSの設定を行う必要があります。ドメインを取得して、AレコードとMXレコードを設定してください。AレコードでグローバルIPアドレスとドメインを紐づけます。次に、そのドメインとMXレコードを紐づけます。サーバ本体とは別にファイアウォールを設置されている場合は、そちらの設定も忘れずに行います。SMTPサーバ/postfixSMTPサーバとしてpostfixをインストールします。私の環境では、デフォルトでインストールが完了していました。以下のコマンドでインストール状況を確認しましょう。postfixインストールされていない場合には、いつものようにyumでインストールします。8ではyumがdnfへ変更されるんでしたね。postfixインストール自体はこれで終わりです。postfixの設定postfixの設定を行います。/etc/postfix/main.cfを編集します。編集項目のみを抜粋します。Maildir/スパム対策スパム対策を行います。必要なパッケージをインストールします。procmailspamassassinを利用したスパム対策では、procmailを使用します。postfixの設定を変更します。下記の内容を有効にします。/usr/bin/procmail/etc/procmailrcを作成し、以下の様に編集します。fw|/usr/bin/spamc通常は、この後にfirewall-cmdでsmtpを有効にしいます。--runtime-to-permanentここまでは簡単な設定です。SMTPサーバを外部の方が使われないのであれば良いのですが、SMTPサーバを勝手に外部の人が使うケースがあります。ならない為に、スパム対策が色々とあります。そこまでの内容をここで記載するには、時間が掛かるので、今回はここまでにします。会社などで外部からSMTPサーバへアクセス出来ないようなにしている場合にはこの程度で十分ではないかと思います。社外からSMTPサーバを使えるようにすると、関係のない人もSMTPサーバを利用出来てしまいます。インターネット上の公開サーバなども同じです。その場合には、スパムホスト対策やSMTP-AUTHやCRAM-MD5認証など対策を行う必要があるでしょう。詳しくは、別の機会に投稿したいと思います。私の環境では、firewallでSMTPを閉じてしまいました。外部からSMTPのサービスを使用できなくするだけでOKです。POPサーバ/dovecotPOPサーバにはdovecotを利用します。dovecotが入っていない場合には、以下のコマンドでインストールします。dovecotdovecotの設定dovecotの設定を行います。/etc/dovecot/conf.d/10-mail.confを編集します。SSL用のpop3sも有効にしていますが、使わなければコメントアウトしておきます。yes}}firewallの設定を行います。--add-service=pop3サービスを起動サービスを起動します。コマンドによる動作確認mailxコマンドを用いて動作確認を行います。mailxをインストールします。mailxmailxコマンドを実行します。receive@domain.jpdateコマンドで日時を出力し、その結果をメールのタイトルとして送信します。-rで送信元のメールアドレスを指定し、一番最後に送信先を指定します。実際に受信をしてみるとわかりますが、送信してから受信完了するまでに時間が掛かる場合があります。失敗すると、次に再送を行うまでに3分程時間を要する設定にデフォルトではなっています。チューニングほんの少しだけチューニングします。/etc/postfix/main.cfの最後に以下を追加します。120s詳しくは別途調べてみてください。改善されていると思います。主様コメントするはじめに今回はVulsを用いた脆弱性の検査を行う。本サイトは個人運営のため、メンテナンスが不十分であり対象パッケージのアップデートに追従できていないことに注意!流れは以下の通り。以上について順を追って記載する。オフィシャルなインストール方法は以下のURLに示されており、参考にしている。実行ユーザの作成Vulsを実行するユーザの作成を行う。vulsusersudoを許可するためにvisudoでユーザに許可をします。以下を最終行に追加する。以下を最終行に追加する。HTTPS_PROXY"セキュリティ確保の為、不要なユーザによるsudoを許可したくない場合には、作業終了後に上記の内容を削除する。※継続的なモニタリングを行う場合には、残しておく必要あり。ログ格納用ディレクトリの作成vulsのログを格納するディレクトリを作成する。/var/log/vulsgo環境のインストール以下のサイトからパッケージをダウンロードする。https://golang.org/dl/本資料作成時点における最新バージョンは1.12でしたので、以下のコマンドを実行し解凍する。go1.12.linux-amd64.tar.gzgoの環境変数を設定する。/etc/profile.d/goenv.shを新たに作成する。PATH=$PATH:$GOROOT/bin:$GOPATH/binここでvulsの実行ユーザでgo環境の確認を行う。vulsuser環境変数を読み込む。<====これは基本的に不要である。<====これは基本的に不要である。linux/amd64バージョンが正しく表示されていれば、goのインストールは成功している。)が提供するNVDと、IPA(情報処理推進機構)が提供するJVNから脆弱性情報を取得する。gitのサイトを覗いてみると、どうも日本人の方がまとめてくれているみたいですね。install今度は、Linuxのディストリビュータが提供されているOVALも取得する。install各データベースを構築する。NVDのデータベースを構築する。古い情報から取得するので、時間は結構かかる。オフィシャルのインストールマニュアルには、AWSで10分程度となっていたが、1〜2時間程度は覚悟した方が良さそう(^^;出力さているログを見ていると、西暦が記されたファイルがちらほら見受けられるので、進捗状況が分かると思う。doneJVNのデータベースを構築する。こちらは更に古くて1998年以降のデータベースになる。オフィシャルのインストールマニュアルには、こちらもAWSで10分程度とされているが、実際どれだけかかるのか。doneOVALのデータベースを構築する。7ここからはある意味でオプションデータベースみたいな感じもするけど、オフィシャルマニュアルに記載があるので、合わせて登録する。gostのデータベースを構築する。これまでよりは少し短い時間で構築できるが、それも10分程度は覚悟。ディストリビューたから脆弱性に関するパッチが提供されていないものを検出出来るとのこと。installExploitのデータベースを構築する。0.6.0から提供されているので、それを使いたい場合に追加する。installVulsのインストールデータベースの準備が整い、これからVulsのインストールを行う。ここは、オフィシャルマニュアルを丸コピ!※Vulsを再インストールするとかアップデートする際には、ここでインストールするソースを含めた生成物を削除する必要があるらしい。方法については後述する「Vulsのアップデート」に記したが、オフィシャルマニュアルも合わせて確認すること。installVulsの設定ファイルを作成する。"local"設定ファイルの確認を以下のコマンドで行う。configtestエラーが表示されなければ完了である。Vulsによる脆弱性の検査ローカルスキャンの方法を記載する。ローカルスキャン以外にもリモートスキャンを行う方法等も準備されているので、必要に応じてセットアップなどを行ってやってみるのも良いかと思う。ローカルスキャンのコマンドは至ってシンプルで以下のコマンドで実施する。scanVulsのアップデート(新規インストール時は不要)Vulsをアップデートする時は、実行モジュールとソースを全削除してから行うらしい。いうことで、ここで記載する内容は、Vulsをアップデートする際に行う事前作業であり、新規インストール時には必要ない。installスキャン結果の確認スキャン結果を確認してみる。困ったことに、-format-short-textオプションが使えなくなっているみたい。オフィシャルマニュアルにはまだその記載があるのだが、諦めて他の出力結果を試してみる。デフォルトの出力結果を出してみた。コマンドは以下の通り。-lang=jaちなみに、この時点で-lang=jaは全く意味が無かった(笑)日本語が出てくれることを期待しただが。?:0),全体で200の脆弱性を確認している。各レベルに対応した数値が提示されている。Fixed200件中199件でアップデートパッケージが提供されている。表は、それぞれの脆弱性に関するレポートが示される。TUI形式で表示することも可能。tui終了は、Ctrl+Cで行う。VulsRepoを用いた解析方法などもあるようだが、今回はここまで。主様コメントするWebAssemblyのインストールWebAssemblyを導入してみようと思い立ち、取り敢えずググること数時間。7に取り敢えずインストールして試してみようかな?と言うことでやってみた。解らないながら、node.jsを入れておくと良さそうなので、インストールしておく。node他にも入ってるかも知れないけど、gccとか既に入っていたので無視!確認のために必要なWebサーバについても、Apacheがインストールされているので、こちらも無視。何かあったらエラー出てくるだろう?ということで。適当なディレクトリを作成して、gitでクローンを作るところから始まる。https://github.com/emscripten-core/emsdk.gitよくわかんないけど、こんな感じでおまじないを入れる。clang-incoming-64bit最初はそこそこ時間掛かるみたいです。終わったら、サンプルプログラムを動かしてみようと思います。World!\n");return(0);}ここではC言語なのに、敢えてsample.cppとして作りました。コンパイルしてみます。emsdkを構築したディレクトリで以下のコマンドを実行して、環境設定を行います。./emsdk_env.shこのままだと毎回上記のコマンドを実行する必要が生じますので、ログイン時に設定する様にした方が良いですね。