ラベル

Server (108) work (77) Idea (68) Car (31) PC (29) DAW (28) other (19) MakingWEBsite (18) 趣味 (18) health (13) CentOS (11) drupal (11) (9) android (4) スマホ (4) communication (3) drupal7 (3) hint (3) meno (3) モバイル (3) 歯医者 (3) 第二種電気工事士 (3) 英語 (3) PC Server (2) drupal8 (2) ms access (2) uwp C# (2) めし (2) 整備 (2) 音楽 (2) MIDI (1) diy (1) 会計 (1) 動画再生 (1) 生活 (1) 郵便 (1) 食べ物 (1)

2017年7月30日日曜日

AngularJS RESTful Web Services drupal SPA(Single Page Application) Decoupled  JavaScriptフレームワーク

Augula
drupalの取り込み。(views、コンテンツのデザインを補ったり。)

MS Edgeは正常に機能しないことがあるので、既定のブラウザをchromeに変えておく。

---------------------------------------
Angularとdrupalでデータのやりとりをするためにお互いに理解できる共通の規格が必要。

RESTful Web Services
REST(Representational State Transfer) という規格に従って情報のやりとりをする仕組み。
この仕組みを介してdrupalとAngularの間で情報のやりとりをする。

具体的には、drupalに入っているモジュール
WEB SERVICESグループのモジュールを全部オンにする。
HAL
Serializes entities using Hypertext Application Language.
HTTP Basic Authentication
Provides the HTTP Basic authentication provider
RESTful Web Services
Exposes entities and other resources as RESTful web APISerialization
Provides a service for (de)serializing data to/from formats such as JSON and XML
Install

REST UIーーー後から入れるモジュール
REST UIの設定
admin/config/services/rest/resource/entity%3Anode/edit
Home>>Administration>>Configuration>>Web services>>Rest

GranularityをMEthodにする。

下のGet Delete pachのxmlを除いたすべてをチェック。
GET
Accepted request formats
 hal_json
 json
 xml
Authentication providers
 basic_auth
 cookie
 POST
Accepted request formats
 hal_json
 json
 xml
Authentication providers
 basic_auth
 cookie
 DELETE
Accepted request formats
 hal_json
 json
 xml
Authentication providers
 basic_auth
 cookie
 PATCH
Accepted request formats
 hal_json
 json
 xml
Authentication providers
 basic_auth
 cookie

コンテンツを作る時に
URL PATH SETTINGS
URL alias
を設定しておく。

viewsを作る時にREST EXPORT SETTINGS-Provide a REST exportにチェック。
URLを記入する。
----------------------------------------
ここで設定したdrupalのhal_jsonまたはjsonファイルを取得するには
コンテンツのアドレスの後ろに
?_format=hal_json
?_format=json
をつける。
-----------------------------------------
Angularのインストール

AngularをインストールするのにNode.jsが必要。

Node.js-----サーバーサイドJavaScript
CentOSはEPELリポジトリからインストールできる。
Windowsは、Windows用のインストーラーがある。
インストール後
node -v
npmも使えるようになっているはず
npm -v
で確認。
ただ、angular-cliがangular/cliになって、その時にデフォルトの管理ツールがnpmからYARNというものになった。とか。
Yarn--FaceBook、Googleなどで共同開発している物だそうだ。
モジュールの並列ダウンロードによる高速化、ロックファイルによる依存関係のバージョンの固定など、いろいろと改良されているそうだ。
インストールは
npm install -g yarn
---------------------------------------------

Angularの設置。

自分で0から作ってもいいのだろうけど。
でも、それでは大変なので土台になる型を作ってそこから始める。


Angular QuickStartwを使った立ち上げ方法。
quickstart-master.zipをダウンロードして展開したルートフォルダーにコマンドプロンプトで移動して
npm install
この方法はアプリを立ち上げるたびに、この作業をする。
アプリの起動
npm start




Angular CLIをインストールしてng new アプリ名 で立ち上げる方法。
Angular CLIにはGITが必要らしい。
WindowsにはGit for Windows
Git-2.13.3-64-bit.exe
をインストール。

CentOS
npm install -g angular-cli
(angular-cliがangular/cliになった。のか。)

Windows--コマンドプロンプトで
npm install -g @angular/cli

インストールの確認は
ng --version
-----------------------------------------------------------------
アプリ毎に必要な土台を作る。

アプリの作成は、任意のフォルダーに移動して
ng new アプリ名

アプリの起動
今作った「アプリ名」フォルダに移動
cd アプリ名
して
ng serve
(アプリのビルドとWebサーバーの起動)
または
ng serve --open
(openはブラウザを自動で開くオプション)
すると、
http://localhost:4200/
に最初の画面が表示される。

確認したらctrl+cで抜ける。
抜けた後は当然http://localhost:4200/にはアクセスできなくなる。
-----------------------------------------------------
ライブラリなどのインストール
ここで、
yarn add intl bootstrap ngx-bootstrap --dev
これで、最新安定板が入る。
バージョンを指定するには
yarn add bootstrap@3 --dev
yarn add bootstrap@4 --devとして、バージョン4に安定板がない時には3の安定板か4のアルファ、ベータ版などから選択できるように表示される。
ダウングレードしたいときはそのバージョンを指定する。

npmを使いたい場合は
npm install --save intl@1 bootstrap@3.3.7
saveオプションはjsonファイルに書き込む

----------------------------------------------------
サーバーアップ用ディレクトリdistは
ng build --env=prod
で作られる。
(ここいら辺の事はよくわからない。よく調べてからやった方がいい。データバインドの自動更新の仕方など、オプションによってデベロップ版とプロダクション版で動きが違ってくるみたいだ。)
(ng build --prodだけだとうまくいかない。Environment "" does not exist.とエラーが出る。)

---------------------------------------------------------------
chromeブラウザにデフォルトでデベロッパーツールが入っている。
F12を押すか、Ctrl+Shif+iか、「その他のツール」>「デベロッパーツール」

2017年6月くらいから、
Filter icon missing from Chrome Developer tools console
デベロッパーツールのコンソールからフィルタアイコン、それから、正規表現(Regex)が消えたみたいだ。自分の必要なものだけを取り出して処理の順番を見たいときはどうするの?
普通にスペースで区切って並べて書いてもうまくいかない。

augury
デベロッパーツールのエクステンションとしてchromeにインストールする。
https://augury.angular.io/
ただ、今(2017/08/10)のところAngular4には対応していないみたいだ。

-----------------------------------------
検証しとく

Angular側
HttpModule

Drupal側
jDrupal

-----------------------------------------

ディレクトリ構造。など。

src/app/
以下にファイルを作っていく(ファイルができている)。

src/app/app.module.tsなど、
モジュールに関しての情報。
モジュール、コンポーネントをインポート。など。
(.tsはTypeScriptの略)

src/app/app.component.tsなど、
コンポーネントに関しての情報。
taitle = 'タイトル' などが書かれているところ。

src/app/app.component.html
サイトの大枠。

src/app/app.component.css
CSS情報

src/main.ts
モジュールをインポートして起動。


------------------------------------------------
どうして下のようなことを書いたのか忘れた。一応、消さずにとっておく。
srcと同じフォルダ?で、
npm startコマンド

-------------------------------------------------------
Angular推薦IDE(Integrated Development Environment)
WebStorm(個人向け $59 first year)
IntelliJ IDEA(個人向け $149 first year)
Visual Studio Code(無料。プラグインなどを自分で設定する)

------------------------------------------------------
Firebase----いろいろと便利らしい
Ajax--------同一画面での動的なサイト作りができる。(サーバーから一画面毎に画面を送信するのではなく。)
JSON(JavaScript Object Notation)---(小さい、複雑なことも記述できる)データベース
-------------------------------------------------------
ng2-bootstrapはngx-bootstrapに名前が変わっている。
yarn add ngx-bootstrap --dev


2017年7月25日火曜日

PHP OPCODE CACHING opcache CentOS php7.1

CentOS 6.9 php7.1(remiリポジトリ)

drupalインストール後の設定。

phpにopcacheモジュールが組み込まれているかを確認する。
php -m | grep -i opcache

opcacheがインストールされているかどうかの確認。

インストールといっても、設定用のテキストファイルを設置するだけだと思う。
yum list installed | grep opcache

見当たらなかったので、opcacheを探した。

# yum --enablerepo=epel,remi,remi-php71 search opcache
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * remi: rpms.remirepo.net
 * remi-php71: rpms.remirepo.net
 * remi-safe: rpms.remirepo.net
 * updates: ftp.riken.jp
==================================================== N/S Matched: opcache ====================================================
php-opcache.x86_64 : The Zend OPcache
php-pecl-zendopcache.x86_64 : The Zend OPcache
php54-php-pecl-zendopcache.x86_64 : The Zend OPcache
php55-php-opcache.x86_64 : The Zend OPcache
php56-php-opcache.x86_64 : The Zend OPcache
php70-php-opcache.x86_64 : The Zend OPcache
php71-php-opcache.x86_64 : The Zend OPcache

  Name and summary matches only, use "search all" for everything.

opcacheのインストール

yum --enablerepo=epel,remi,remi-php71 install php71-php-opcache
ここで上のように
php71-php-opcache.x86_64
をインストールしてしまったのが間違い。
yum --enablerepo=epel,remi,remi-php71 install php-opcache.x86_64
とすれば普通に今までの
/etc/php.ini
/etc/php.d

/etc/php.d/10-opcache.ini
が入ったのに、上のphp71-php-opcache.x86_64をインストールしてしまったために、
今までの場所にプラスして
/etc/opt/remi/php71/php.ini
/etc/opt/remi/php71/php.d/10-opcache.ini
へphp7.1が2重にインストールされてしまった。(今はアンインストールした。)
その時にインストールされたもの

  Dep-Install audit-libs-python-2.4.5-6.el6.x86_64            @base
    Dep-Install environment-modules-3.2.10-3.el6.x86_64         @base
    Dep-Install libsemanage-python-2.0.43-5.1.el6.x86_64        @base
    Dep-Install php71-php-common-7.1.7-1.el6.remi.x86_64        @remi
    Dep-Install php71-php-json-7.1.7-1.el6.remi.x86_64          @remi
    Install     php71-php-opcache-7.1.7-1.el6.remi.x86_64       @remi
    Dep-Install php71-runtime-1.0-1.el6.remi.x86_64             @remi
    Dep-Install policycoreutils-python-2.0.83-30.1.el6_8.x86_64 @base
    Dep-Install setools-libs-3.3.7-4.el6.x86_64                 @base
    Dep-Install setools-libs-python-3.3.7-4.el6.x86_64          @base
    Dep-Install tcl-1:8.5.7-6.el6.x86_64                        @base

上の赤線のphp71-だけをアンインストールしておいた。
php71-が
/etc/opt/remi/php71/php.d/
ディレクトリを作ってしまう。

で、
最後に
/etc/rc.d/init.d/httpd restart
を忘れずに。
drupalのopcacheエラーを消すにはdrupal側のキャッシュクリアが必要かもしれない。


PECL uploadprogress libraryをインストールする。

画像をアップロードするときに進度具合を表示するライブラリーかな?

PECL uploadprogress libraryを探す。
yum --enablerepo=epel,remi,remi-php71 search PECL-uploadprogress

PECL uploadprogress libraryをインストールする。yum --enablerepo=epel,remi,remi-php71 install php71-php-pecl-uploadprogress.x86_64
上もphp71-だったので、
/etc/opt/remi/php71/php.d/
にもインストールされてしまったので、アンインストールして入れなおした。

yum --enablerepo=epel,remi,remi-php71 install php-pecl-uploadprogress.x86_64


2017年7月22日土曜日

drupal8 theme テーマ カスタム

テーマの置き場所は
/themes/
配布しているものと自分で作ったものとを分けたいときは、
/themes/contrib/
/themes/custom/
に分けるのがなんとなく(開発者の間では)緩い決まりらしい。

テーマを自分で作る時に最低限必要なもの。
/themes/custom/hogepeke/hogepeke.info.yml
中身は
name: hogepeke
type: theme
description: hegepeke thema
core: 8.x
base theme: classy
base themeは何も指定しない場合Stableになるそうだ。
Stableが一番シンプルなものらしい。

その他テーマのバージョン
version: 8.x-1.0
などをいれる。
詳しくは、drupalのサイトで、
Defining a theme with an .info.yml file
Create an .info.yml file
を見ること。


vi centos 全選択

全部を選択
ggVG

gg で先頭に移動
V  大文字Vでビジュアルモード、行選択。
G   大文字Gで最終行。

もう一度Vを押せばビジュアルモードから抜けることができる。

で、sshコンソールの中身をWindowsのテキストに貼り付けられると思ったら、できなかった。
-------------------------------------------------------------
すべてを削除
:%d
----------------------------------------------------------
行の削除
dd

cron 設定 エラー出力

cronの設定で
下のようにしてメールを送らない設定にすると困る時がある。

vi /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#MAILTO=root
MAILTO=""
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

スクリプトをcronで実行して
/usr/local/bin/pekehoge.sh: line 135: iptables: コマンドが見つかりません
こんなエラーがメールで送られてくることがある。このエラーは、cronログには出てこない。自分で設定をしないとログに出てこない。
(logファイル全部の串刺し検索もしたけど見つからなかった。)
で、
上の/etc/crontabで、メール設定は有効にした状態でエラーをログに出したりエラーメールだけを送る方法。

エラーメールだけがほしい時、cronの設定の最後に
1> /dev/null
とする。標準出力を/dev/nullというゴミ箱に出力する(捨てる)という意味。
"1>"は標準出力、"2>"は標準エラー出力。1の場合は省略できるので
> /dev/null
とも書ける。
自分の設定はとりあえずこれにしておく。cronが見かけ上動いていても、スクリプトの一部のコマンドが機能していないときにメールがほしい。cronが動いているかどうかはcronログをみる。

同じように
 1> /dev/null 2>&1                   標準出力も標準エラー出力も捨てる
 1>> /var/log/pekehoge.log 2>&1    標準出力も標準エラー出力もログファイルに書き出す 
 >> /var/log/pekehoge.log              標準出力はログファイルに書き出し、標準エラー出力はメールする

ログファイルに書き出すときのローテートの設定。
# vi /etc/logrotate.d/pekehoge
/var/log/pekehoge.log
{
    monthly
    rotate 24
    compress
    missingok
}
月ごとにローテートして、24世代保管、gzipで圧縮して、ログファイルが存在しなくてもエラーを出さずに処理を続行









2017年7月18日火曜日

tmpfs RAMディスク CentOS


tmpfs(RAMメモリがデバイスtmpfsとして認識、登録されている。)を使うには。

OS起動時に自動でtmpfsが
/dev/shm
にマウントされる。
一時的にただ単にRAMディスクを使いたければ、これをそのまま使ってもいいのかな?
dev以下を直接使うっていう話もあまり聞かない気がするけど、再起動すると消えるようなものを置くところだし、直接使えばfstabに記述しなくてもいいのだし・・・。
RAMメモリの容量の半分までが動的に割り当てられるそうだ。


tmpfsを/tmpにマウントして使いたいときは、
# vi /etc/fstab
tmpfs /tmp tmpfs defaults 0 0
上のようにサイズを指定しないとメモリの半分が割り当てられる。
容量は動的に動くみたいだ。(ディレクトリに指定すると半分が固定されるとも書いてあるものもあるから、実際の容量を確認しながら使った方がいいと思う。)
容量を固定したければ下のようにする。
tmpfs /tmp tmpfs defaults,size=64m 0 0

なんでこんなことを調べたか。
Brute Force Attackが多くて、ほとんどは無害のアタックなのだけど放っておくべきか、対策を立てるべきか迷っている。
で、とりあえず対策を取って様子を見てみることにした。
ログのチェックをするスクリプトをcronで回してアタックしてくるipをiptablesにdropするように書き出して拒否したいのだけど、下手するとその行為がBrute Force Attack以上の害になってしまうんじゃないかと・・・。
でも、やってみたいという興味もあるし、だから、実験としてやってみる。
で、hddに書き出してもいいのだけど、最初は30秒とか1分おきにcronを回そうと思っているので、負荷による故障を避けるためにラムディスクに書き出してみ用と思った。(cronは2つ同時に回して片方を30秒スリープ掛けることで30秒おきにできるのだそうだ。)
自分の感覚から行くと、2分から3分に一回回しておけばほぼなくなるのではないかと思う。
とかなんとか書きながら、dropするIPアドレスの登録を手動でやっていたらだいぶ攻撃が減った。
1時間に一回くらいになってしまった。
Disconnecting: Too many authentication failures for root
と、一回、sshオリジナル拒否に拒否されるとあきらめる感じ。
こんな感じなら一日に一回cronを回しとけばいいか。
となると、RAMディスクは必要なくなるか?
実際にやってみるとRAMディスクを使うとものすごく処理が速くなったから一日に一回でもRAMディスクを使うことにした。

---------------------------------------------------
drupal8が結構遅いんだよなぁ。
phpなどのページのキャッシュをRAMディスクに置くといいのかな。

置けるものならデータベースをRAMディスクに置くと速くなるだろうけど、突然PCが落ちたときにバックアップがとれないなぁ。



2017年7月13日木曜日

らじるらじるの録音 CentOS

民放、radikoの録音方法は
http://yasutam.blogspot.jp/2014/05/centos-6-radiko.html
に書いた。

ここでrtmpdump, ffmpeg, lame, など
らじるらじる録音に必要なものをインストールをしている。

-----------------------------------------------------------------
らじるらじる(NHKラジオ)の録音

rtmpdumpを使って録音
録音時間の設定 --stop 902(秒)

m4aを再生できない機器でmp3に変換したい場合。
lameなどmp3エンコーダーをインストールして
ffmpeg -i InputFile.flv -ab 128K Output.mp3


NHK FM放送
rec_razirufm.sh

#!/bin/sh

/usr/bin/rtmpdump --rtmp "rtmpe://netradio-fm-flash.nhk.jp" --playpath NetRadio_FM_flash@63343 --app "live" --swfVfy http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf --quiet --live --stop 902 -o /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv
sleep 1m
#-- convert flv to mp4
/usr/bin/ffmpeg -i /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv -acodec copy /tmp/nhkfm_`date +%Y%m%d%H%M%S`.m4a



NHKラジオ第一放送
rec_raziru1.sh

#!/bin/sh

/usr/bin/rtmpdump --rtmp "rtmpe://netradio-r1-flash.nhk.jp" --playpath NetRadio_R1_flash@63346 --app "live" --swfVfy http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf --quiet --live --stop 960 -o /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv
sleep 1m
#-- convert flv to mp4
/usr/bin/ffmpeg -i /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv -acodec copy /tmp/nhk1_`date +%Y%m%d%H%M%S`.m4a



NHK ラジオ第二放送
rec_raziru2.sh

#!/bin/sh

/usr/bin/rtmpdump --rtmp "rtmpe://netradio-r2-flash.nhk.jp" --playpath NetRadio_R2_flash@63342 --app "live" --swfVfy http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf --quiet --live --stop 960 -o /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv
sleep 1m
#-- convert flv to mp4
/usr/bin/ffmpeg -i /tmp/RadiruRec/`date +%Y%m%d`_raziko.flv -acodec copy /tmp/nhk2_`date +%Y%m%d%H%M%S`.m4a


これらのファイルを/usr/local/binに移動。
mv rec_raziru2.sh /usr/local/bin/rec_raziru2.sh

rootでの実行権限をつける
chmod 755 /usr/local/bin/rec_raziru2.sh

cronに登録
radioファイルを作ってそこにrec_raziru2.shを登録する。
vi /etc/cron.d/radio
15 09 * * 3-5 root /usr/local/bin/rec_raziru2.sh
(パスは通っているのだけどユーザーを指定してフルパスで記述しないと動かなかった。なぜだろう?)



2017年7月11日火曜日

コマンドプロンプト PowerShell

PowerShellの名前を忘れるので・・・。メモ。

コマンドプロンプト
PowerShell

PHP Fatal error Uncaught Error:  mysql_系関数が使えなくなった。

mysql5.3.3からMariaDB10.2.6に変えた後からだったか、動かなくなったサイトがあってapacheのlogを確認していたら

[Mon Jul 03 15:03:02 2017] [error] [client 192.168.??.??]
PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in

undefined functionと言われても今まで動いていた関数だし・・・。
検索かけたら、
phpのマニュアルページに
警告
この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。
と書いてある。

そうなんだ。。。
今はPDOを使うのがいいそうだが、書き換えるのは大変そうだ。

で、単純にmysql_ をmysqli_に置き換えてみる。
ただ、置き換えただけでは引数の順番が違ったりしてうまくいかないこともある。

とりあえず動かしてみてしばらく様子を見てみる。

logwatch 設定 logwatch.conf

logwatch送信時に自分で設定したコマンドの結果や自分のスクリプト結果も送れないかと思って調べてみた。

結果:できそうだけど、面倒そうなのでやめた。

logwatchはログ収集専門だろうけど、

hdd空容量表示に
df
を使っているのだろうから他のコマンドも使えるだろう。

参考にしようと思ってdfを扱っている部分を見てみると
/usr/share/logwatch/scripts/services/zz-disk_space.conf
(話は違うがオーバーライドさせたいなら、
/etc/logwatch/conf/services/zz-disk_space.conf
ここに書き込んどいたほうが安全。)
1行で簡単にすむと思ったらそうでもない。
違う方法の方がよさげ。
ログに結果を出してそれを読ませるとか・・・。

ちなみに
/usr/share/logwatch/scripts/services/
に並んでいるサービスのオン・オフ切り替えは、logwatch.confのServiceで設定できる。
---CentOS6のconf----------------------------------------
Service = All
# You can also disable certain services (when specifying all)
Service = "-zz-network"     # Prevents execution of zz-network service, which
                            # prints useful network configuration info.
Service = "-zz-sys"         # Prevents execution of zz-sys service, which
                            # prints useful system configuration info.
Service = "-eximstats"      # Prevents execution of eximstats service, which
                            # is a wrapper for the eximstats program.
-------------------------------------------
Allで全部をオンにしておいて、不必要なものに"-"をつけている。


logwatchの設定ファイル置き場。
優先順位は一番下が一番優先される。
/usr/share/logwatch/default.conf/logwatch.conf
/usr/share/logwatch/dist.conf/logwatch.conf
/etc/logwatch/conf/logwatch.conf
/etc/logwatch/conf/override.conf


実行するにはそのまま
logwatch



logwatch本体
/usr/share/logwatch/scripts/logwatch.pl

Drupal Console on Windows 10

Drupal Consoleは同じ環境のインストールをいくつも作れたりと便利そう。

今のところ自分の環境でうまく動いていない。
drupal initなどは動く。site:newなどが動かない。
その後、ランチャーをアップデートしたらdrupal initがドキュメントルートで動かなくなった。
drupal consoleのフォーラムを見ていると、同じようなことで困っている人がいるみたいだ。ただ、その人たちや自分が正しいことをしているのかどうかはわからない。
いろいろなもののバージョンの関係もあるだろうし・・・。
自分はdrushがあれば十分なので少しの間Drupal Consoleは保留にする。


ここから下は、Windowsのコマンドプロンプト上でlinuxのコマンドを使える状態(Cygwin+git  自分の場合はたまたまこの環境。gitだけでも大丈夫だと思う。)で、そこにのせてphpのComposerコマンド使える状態になってからのインストール方法。

DrupalConsoleを動かすのに2つインストールする必要がある。
1. The DrupalConsole ランチャー
2. DrupalConsole それ自身

-------------その1---------------
Drupal Console ランチャーのインストール。

D:\drupalconsoleなどで、
php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar

Linux系ではでもいい。
curl https://drupalconsole.com/installer -L -o drupal.phar
mv drupal.phar /usr/local/bin/drupal
chmod +x /usr/local/bin/drupal

drupal.pharがD:\drupalconsoleにできているのを確認して同じフォルダにdrupal.batファイルを作る。
drupal.batファイルに
@php "%~dp0drupal.phar" %*を貼り付ける。

環境変数pathにD:\druaplconsoleを追加してWindowsを再起動させる。

DrupalConsole Launcherのアップデート
drupal self-update

ランチャーを使ってDrupal Console を動かすには。
drupal


-------------その2----------------
Composerを使ってDrupal Consoleをインストール。

まずDrupalのドキュメントルートに移動して、
cd /path/to/drupal8.dev

下のコマンドを実行する。
composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader

DrupalComposer projectのテンプレートをダウンロードする。
(リポジトリdrupal-composer/drupal-project:8.x-devをダウンロードする。
これをダウンロードして、インストール、アップデートをすることでConsoleのコマンドが使えるようになる。)

composer create-project drupal-composer/drupal-project:8.x-dev drupal8.dev --prefer-dist --no-progress --no-interaction

DrupalConsoleのアップデートをする。

composer update drupal/console --with-dependencies

---------その3----------


drupal site:new
drupal init
drupal chain


下でうまくいったとかうまくいかなかったとか書いてあるけど、最終的にはいろいろとやりすぎてどれがうまくいってどれがうまくいかなかったのかわからない状態。
まっさらな状態からやり直さないと検証できなくなってしまった。

drupal consoleを始めるには
composerのコマンドで
composer require drupal/console:~1.0
として、ダウンロード、インストール。
(結構時間がかかる。)

drupal init
として、
ファイル群をコピーする。


drushを入れるために作った環境がWindows上にあれば、

composer global require drupal/console:@stable

だけでインストールできる。
と思ったら、うまくいかない。
drupal.batもどこにも見つからない。(後述:batは自分で作るんじゃないのか?)

で、
Drupal Community
Install Drupal Console on window
を見て、その通りにやったらうまくいった(最初からそこを見るべきだったなぁ)。

Install Drupal Console on window

Posted by huythuan on 21 Apr 2016 at 18:52 UTC
I installed drupalconsole on Window 7 as follow:
1. Install XAMPP, or update XAMPP, make sure that PHP version 5.6 or above
2. add path: C:\xampp\php to window path variable (Right click on Computer, > Advanced system settings > Environment Variables > edit path)
type php --version, make sure the result version is 5.6 or above
3. create folder: c:\drupalconsole, cd to this folder on the command , and run this command:
php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar

Make sure that we have file drupal.phar under folder c:\drupalconsole

4. Create drupal.bat file under this folder: c:\drupalconsole, and paste the following code to this file:

@php "%~dp0drupal.phar" %*

5. add path c:\drupalconsole to window variable path (Right click on Computer, > Advanced system settings > Environment Variables > edit path)

6. restart the window, and on the command line type: drupal list, or drupal --version

上の黄土色のところで、環境変数pathにD:\druaplconsoleを追加してしまったのがうまくいかない原因かもなぁ。

-------------------------------------------------------------------------

うまく動かない。

自分のやりたいことは、drupalのインストールをデータベース、モジュール、テーマ、など、設定をしておけばその通りに一気に作ること。
でも、今のところdrupal init など、一部のコマンドしか動かない。
自分のやり方が間違っているのかもしれない。
例えば、
drupalドキュメントルートでdrupalとすると
Drupal Console (1.0.0-rc23)
===========================

Copy configuration files.
[33m  drupal init [39m

Download, install and serve Drupal 8
[33m  drupal quick:start [39m

Create a new Drupal project
[33m  drupal site:new [39m

Install a Drupal project
[33m  drupal site:install [39m

Lists all available commands
[33m  drupal list [39m

Update project to the latest version.
[33m   drupal self-update [39m

と、でるということはsite:newは使えるってことだよなぁ。
でも、オプションも何もつけずに
drupal site:new
としても
 [ERROR] Command "site:new", is not a valid command name.

drupalコマンドのhelpだと、
drupal help site:new

  [Symfony\Component\Console\Exception\CommandNotFoundException]
  The command "site:new" does not exist.



bash cronを止めるスクリプト

自サーバーで常時動いているapacheのプロセスは8つ。

それプラスその時々のapacheのプロセスが立ち上がったり終了したりしている。

で、最近あるプログラムが原因でうまく終了しないプロセスがたまにできてしまう。
それはkillしても消えない。
そうなるとOS自体の再起動になるのだが、一旦つまずいたのを気づかずに放っておくと、cronで起動しているものだからプロセスがどんどん増えていってしまう。

根本的な解決ができるまで、プロセスが増えてしまった時にメールで知らせるのと同時にそのcronを止めるスクリプト。

------------最終型  test.sh-----------------------
#!/bin/bash

#apacheのプロセス数
apanum=`grep -c 'apache' <(ps aux)`

#apacheのプロセス表示
apaer=`ps -u apache -f`

if [ $apanum -gt 100 ]; then

#echo 'more than 100'
mv /etc/cron.d/hoge /etc/con.d/.hoge
ps -u apache -f | mail -s ${apanum} Apache Process hoge@hoge.com

else
#echo 'less than or equal to 100'
#必要ならチェックしたことをログに残しておく。
:
fi

--------------------------------------

cronを止める仕組みは、
/etc/cron.d/hoge
というcronファイルhogeを.hogeと隠しファイルにすると動作が止まるので、その事を利用する。

で、次。
テストとしてapacehのプロセス数の確認で下のようにスクリプトを書いたら動かない
-----------------------
#!/bin/bash

if [ ps aux | grep -c 'apache' > 100 ]; then
echo 'more than 100'
else
echo 'less than 100'
fi

-------------------------
上の赤いところがダメなところだった。
で、こう直した。
------------------------
apanum=`grep -c 'apache' <(ps aux)`
if [ $apanum -gt 100 ]; then
echo 'more than 100'
else
echo 'less than 100'
fi
---------------------------

まず最初にシェルスクリプトでは、'<'とか、'>'を数値比較には使わないらしい。
A>B が A -gt B
A<B が A -lt B
となるそうだ。知らなかった。

あとは、パイプ(とリダクション)はパイプによって渡された後のコマンドが別のプロセスとして動くのでパイプ後のコマンドの結果をスクリプトで使うことはできないのだそうだ。(mailコマンドはパイプでつないでも動いた。)

上スクリプトのエラーとして
./hoge.sh: line 11: [: missing `]'
grep: ]: No such file or directory
が出た。
パイプが認識されていないならこういうエラーになるよなぁ。

この場合、プロセス置換(Process substitution)を使うか、一旦どこか一時ファイルに書き出してそれを読み込むしかないそうだ。
(プロセス置換も一時ファイルに書き出すことを裏(子プロセス)でやっているだけだから、やっていることは自分で書き出すのと一緒だそうだ。(実際、自分のCentOS6では/dev/fd/の下に一時ファイルが作られている。)

プロセス置換の書き方は、   
<(コマンドリスト)   コマンドの結果をファイルに加工されたもの。
>(コマンドリスト)   出力先をコマンドに渡す。

自分の場合、
<(ps aux)
としてps auxの結果をファイルとして出している。
)
(プロセス置換はbashでは動くがshでは動かないそうだ。)

*ここで「/bin/sh」と「/bin/bash」の違いの説明。
「/bin/sh」は「/bin/bash」へのシンボリックリンク。
でも「sh という名前で bash を起動すると、 bash は古くからある sh の起動動作をできるだけ真似しようとします。」ということだそうだ。




2017年7月9日日曜日

ps  プロセス表示 コマンド

psコマンド

例えばオプションで"-f"と"f"とで全然違うオプションになるから注意。
それと、マイナスオプションとマイナス無しオプションを同時に使うとうまく働かないようだ。

例えば、
ps -u apache x
ps x -u apache
とやってもユーザー名は表示されない。マイナス記号無しが優先される?

詳しくは
man ps

root権限で
単に
psとしてもrootで動かしているプロセスも表示されない。

一番よく使うと思われるオプションは
ps aux
これで、すべてのプロセスが表示されるはず。


apacheユーザープロセス表示は
ps aux | grep 'apache'
表示された内容の説明を表示させたければ、
ps aux | egrep 'PID|apache'
PIDのところは
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
など、適当に。

apacheで実行しているプロセス数は
ps aux | grep -c 'apache'

メールで送るには
ps aux | grep -c 'apache'  | mail -s 'apache process number' hoge@hogel.com
-----------------------------------------------------------
マイナス系オプションでは

すべてのプロセスを表示させるには
-e
(-Aと同じ)

apacheユーザーが実行しているプロセスを表示させるには-u
ps -u apache
とする。

何によってそのプロセスが実行されているのかを知るのには
(プロセスに関してできる限り多くの情報を得るには)
-f をつける。
(オプション "f" ツリー形式で表示するとは別?よくわからない。)
(-fより完ぺきな-Fもあるそうだ。)
ps -f

例えば
ps -u apache -f
とすれば、今、apacheユーザーが実行しているプロセス情報を表示。
これは、
ps aux | egrep 'PID|apache'
とほぼ同じ内容。

apacheで実行しているプロセス数
ps -ef | grep -c "apache"ps -u apache -f | grep -c "apache"

apacheで実行しているプロセス数をメールで送る。
ps -ef | grep -c "apache" | mail -s 'apache process number' hoge@hogel.com


ps auxとした時の主なプロセスステータスの意味。
%MEM  メモリ使用率、プロセスが使用している物理メモリ量。(%MEM=RSS+VSZ)
RSS  実質メモリ使用量(仮想メモリを除いた分。)
VSZ  仮想メモリサイズ。

STAT  プロセスの状態
プロセスの状態の説明
STAT列の1文字目はプロセスの状態。
R  実行可能状態なプロセス(実際に実行していないCPU割り当て待ちのプロセスも含む)
S  割り込み可能な待ち状態。主に復帰時間が予想できるもの。sleepやユーザーの入力待ちなど
D  ディスクIO待ちの状態
Z  ゾンビプロセス状態(親プロセスに待たれずに死んでしまった子プロセス)
2文字目以降は以下を表す状態のようだそうだ。

+  フォアグラウンドのプロセスグループ
s  セッションリーダー。httpdのプロセスを見るとrootユーザーで実行されているプロセスがセッションリーダーとなっているのでが分かる
>  優先度が高いプロセス
N  優先度が低いプロセス
l  マルチスレッドのプロセス
スレッド情報を確認し


START:コマンドが起動した時刻




2017年7月6日木曜日

デスクトップ 付箋 Sticky Notes

Sticky Notesは再起動するたびに立ち上げないと出てこない。

自分はそれでは困るのでスタートアップフォルダに登録してOS起動時に自動で立ち上がるようにしておく。

1、ファイル名を指定して実行に shell:startup 。
2、スタートメニューの「Stiky Notes」をshell:startupによって表示されたスタートアップフォルダにドラッグ。

2017年7月5日水曜日

linux CentOS 複数フォルダのファイル群からテキスト文字を検索する。串刺し検索 WindowsではDevasを使っている。

複数ディレクトリのファイル群からテキスト文字を検索するのにWindowsではDevasを使っている。秀丸でgrepを使えばフォルダの串刺し検索ができるのを後から知った。

Linux系では、コマンドで

find ./ -type f -print | xargs grep 検索文字

find . -name "*.php" | xargs grep 検索文字

-type f ディレクトリではなくファイルを探す。(-type d ファイルではなくディレクトリ)
-printはなくてもいい。
xargs 受け取ったファイルの一覧を次のコマンドへ渡す。
grep 受け取ったファイルの中から指定された文字列のある行を抜き出す。

---------------------------------------------------------------------------
xargsの使い方。
(便利そうな使い方を集めた。)

hogedirディレクトリ内のファイルを、/tmpディレクトリ以下に拡張子「.bup」を付けてコピーする。
$ ls hogedir | xargs -I{} cp hogedir/{} /tmp/{}.bup


180日以上更新されていないファイルを削除する
 find . -mtime +180 -type f | xargs rm

ディレクトリに次のファイルが存在する場合。
Filea
Fileb
Filec
FILE と書いた部分が、実際のファイル名に変換される。
$ ls | xargs -I FILE echo "FILE hogehoge"

File_A hogehoge
File_B hogehoge
File_C hogehoge