update
cat /etc/redhat-release
yum update
history
shopt
vi /etc/profile.d/history.sh

HISTTIMEFORMAT='%F %T '
HISTSIZE=100000
HISTFILESIZE=100000
HISTIGNORE='history:pwd:ls:ls *:ll:w:top:df *'      # 保存しないコマンド
PROMPT_COMMAND='history -a; history -c; history -r' # 履歴のリアルタイム反映
timezone
ll /etc/localtime
timedatectl
date

timedatectl set-timezone Asia/Tokyo
apache
systemctl status apache
systemctl status httpd

yum install epel-release
yum install https://repo.ius.io/ius-release-el7.rpm

vi /etc/yum.repos.d/epel.repo
vi /etc/yum.repos.d/ius.repo
enabled=0

yum install centos-logos.noarch mailcap openldap-devel expat-devel libdb-devel openssl perl
yum --enablerepo=epel install nghttp2 brotli
yum install --disablerepo=base,extras,updates --enablerepo=ius httpd httpd-devel mod_ssl
yum list | grep httpd
systemctl start httpd
systemctl enable httpd.service

httpd -h
httpd -S
httpd -t -D DUMP_VHOSTS
httpd -t -D DUMP_RUN_CFG
httpd -v
httpd -V
httpd -l
httpd -t -D DUMP_MODULES
httpd -M
httpd -t -D DUMP_INCLUDES

ll /var/log/httpd/
less /etc/logrotate.conf
less /etc/logrotate.d/httpd

mkdir /var/www/html/php
chmod 777 /var/www/html/php/
ps aux | grep httpd
systemctl reload httpd
systemctl status httpd
systemctl restart httpd
systemctl status httpd
php5.4
yum info php
rpm -q --changelog php | grep CVE | less

yum install php
php -v
php -r 'phpinfo();'  | less
php modules
php -m | less
yum list --enablerepo=epel | grep php | less
yum install php-bcmath
php -m | less

vi bcmath.php
php bcmath.php
vi gettext.php
php gettext.php
vi gettext.php
php /var/www/html/php/phpinfo.php | less
yum list --enablerepo=epel | grep php | less
yum install php-pgsql
vi postgresql.php
php postgresql.php
mkdir php
vi *.php php/.
mv *.php php/.

php -m | less
yum install --enablerepo=epel php-pecl-redis
php -m | less
vi redis.php
php redis.php
php -m | less
postgresql13
yum install postgresql
yum install centos-release-scl
yum repolist -q
yum repolist all | less
vi /etc/yum.repos.d/CentOS-SCLo-scl.repo
vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
↓
enabled=0

yum repolist all | less
yum repolist -q
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql13-contrib
yum install postgresql13-devel

yum repolist -q
yum install --enablerepo=epel postgresql13-devel
systemctl enable postgresql-13.service
ll /var/lib/pgsql/13/data/
PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-13/bin/postgresql-13-setup initdb
ll /var/lib/pgsql/13/data/
su - postgres

vi /var/lib/pgsql/.pgsql_profile
↓
PATH=/usr/pgsql-13/bin:$PATH
export PATH

which psql
psql -v
psql --version
/usr/pgsql-13/bin/psql --version
ls /bin/psql
ll /bin/psql
ll /etc/alternatives/pgsql-psql
pg_ctl
source .bash_profile

psql -l
psql -U postgres
createuser --login --pwprompt centos
createdb --owner=centos centos
systemctl start postgresql-13
ps aux | grep master
psql -U postgres
psql -l
redis6.2
yum list | grep redis
yum list --enablerepo=epel | grep redis
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
vi /etc/yum.repos.d/remi.repo
vi /etc/yum.repos.d/remi-safe.repo
↓
enabled=0

yum info --enablerepo=epel,remi redis
yum install --enablerepo=epel,remi redis
less /usr/lib/systemd/system/redis.service
systemctl status redis
systemctl enable redis
systemctl status redis
ps aux | grep redis
systemctl start redis
ps aux | grep redis
redis-cli ping
systemctl status redis

less /etc/logrotate.d/redis
pure-ftpd1.0.43
yum list | grep pure | less
yum list --enablerepo=epel | grep pure | less
cat /etc/redhat-release
yum update centos-release
→アップデート無し

yum repolist all | less
yum info --enablerepo=C7.0.1406-base pure-ftpd
yum search --enablerepo=C7.0.1406-base ftp
yum search ftp | less
yum install pure-ftpd
yum repolist all | less
yum list --enablerepo=epel | grep pure

cd /usr/local/src/
yum install wget
wget https://download.pureftpd.org/pub/pure-ftpd/releases/obsolete/pure-ftpd-1.0.43.tar.gz
tar xvzf pure-ftpd-1.0.43.tar.gz
cd pure-ftpd-1.0.43
yum install gcc
yum install openssl-devel
./configure --with-everything --with-paranoidmsg --without-capabilities --with-virtualchroot --with-uploadscript --with-tls
make
make install

https://gist.githubusercontent.com/zrong/c9588a17ccb15e75fdf7/raw/a24c563bfe0cdc238952ce24f560a8de42631c0f/pure-ftpd.sh

systemctl status pure-ftpd
cp configuration-file/pure-ftpd.conf /etc/.
cp configuration-file/pure-config.py /usr/local/bin/.
vi /etc/init.d/pure-ftpd
chmod 755 /etc/init.d/pure-ftpd
chmod 755 /usr/local/bin/pure-config.py
/etc/init.d/pure-ftpd start
ps aux | grep pure
yum install ftp
ftp localhost
java1.8.0
yum list | grep java | less
yum install java-1.8.0-openjdk
java -version
node.js14
yum list --enablerepo=epel | grep node | less
curl -fsSL https://rpm.nodesource.com/setup_14.x | bash -
vi /etc/yum.repos.d/nodesource-el7.repo
yum list | grep node
yum list | grep node | less
yum install nodejs
node -v
npm install forever -g
vi index.js
node index.js
forever start index.js
ll
vi node.js
mkdir node.js
mv index.js node.js/.

環境

$ uname -r
4.4.35-33.55.amzn1.x86_64

$ /usr/local/php-5.6.16/bin/php --version
PHP 5.6.16 (cli) (built: Aug 28 2017 06:35:52)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

結論

curl のタイムアウト動作に対して、
  • default_socket_timeout は影響確認できず(ini_set)
  • max_execution_time は影響確認できず(set_time_limit)
  • CURLOPT_CONNECTTIMEOUT は作用する(curl_setopt)
  • CURLOPT_TIMEOUT も作用する (curl_setopt)
  • CURLOPT_DNS_CACHE_TIMEOUT は影響確認できず(curl_setopt)
  • デフォルトでは2分強でタイムアウト(カーネル仕様と思われる)

curl_setopt 設定値

CURLOPT_CONNECTTIMEOUT :接続の試行を待ち続ける秒数。0 は永遠に待ち続けることを意味します。
CURLOPT_TIMEOUT:cURL 関数の実行にかけられる時間の最大値。

curl_errno の戻り値

  • 正常時:CURLE_OK (0)
  • カーネル側のタイムアウト:CURLE_COULDNT_CONNECT (7)
  • CURLOPT_CONNECTTIMEOUT / CURLOPT_TIMEOUT:CURLE_OPERATION_TIMEDOUT (28)

カーネル側のタイムアウト動作

$ time /usr/local/php-5.6.16/bin/php curl.php
real    2m7.345s
user    0m0.000s
sys     0m0.012s

$ cat /proc/sys/net/ipv4/tcp_syn_retries
6

参考リンク

curl の戻り値
https://curl.haxx.se/libcurl/c/libcurl-errors.html curl実行中に応答が無くなる現象
https://ngyuki.hatenablog.com/entry/2019/09/21/191552 curlのデフォルト値等

https://www.it-swarm.dev/ja/php/php%EF%BC%9A%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AEcurl%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E5%80%A4/1067580731/

https://www.it-swarm.dev/ja/php/php%E3%81%A7%E3%81%AEcurl%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A/968216261/

https://stackoverflow.com/questions/10308915/php-default-curl-timeout-value TCPタイムアウト
https://qiita.com/tukiyo3/items/e66393cf5fd0ede8b3b4

ソースコード

<?php

// default_socket_timeout は、本コードでのタイムアウト動作には影響しない
$socket_timeout = ini_get('default_socket_timeout');
print_r("socket_timeout: $socket_timeout \n"); // -> 60

ini_set('default_socket_timeout', 10);

// max_execution_time は、本コードでのタイムアウト動作には影響しない
$max_execution_time = ini_get('max_execution_time'); // timeout in seconds
print_r("max_execution_time: $max_execution_time \n"); // -> 0

set_time_limit(5);

$max_execution_time = ini_get('max_execution_time');
print_r("max_execution_time: $max_execution_time \n"); // -> 5

$url = "https://www.google.com"; // 正常実行
//$url = "8.8.8.8"; // for connect timeout test
//$url = "http://httpbin.org/delay/10"; // for timeout test

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// デフォルト5分のようだが、カーネルプロトコルスタックのTCP制御で2分強でタイムアウトする
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 3500);

// デフォルトは、無期限
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10000);

curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 3); // 本コードでのタイムアウト動作には影響しない

$str = curl_exec($ch);
$errno = curl_errno($ch);

curl_close($ch);

if ($errno !== CURLE_OK) {
    print_r("errno: $errno \n");
    // CURLE_COULDNT_CONNECT (7) -> カーネル側のタイムアウト
    // CURLE_OPERATION_TIMEDOUT (28) -> CURLOPT_CONNECTTIMEOUT or CURLOPT_TIMEOUT
    return false;
}

if (!$str) {
    print_r("error");
    return false;
}

print_r("success");
return true;

python3.7

 

python3.6

 

Python2.7

2.7でもboto3-1.7.74.dist-info

  • Lambda pythonバージョン

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-programming-model.html

 

boto3 s3 署名バージョン対応

1.5.71 (Botocore)、1.4.6 (Boto3) にアップグレード。

【超重要】対応しないと使えなくなるかも?!今、全S3ユーザがチェックすべき署名バージョン2の廃止について

 

pythonコード

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingAWSSDK.html

すべての AWS リージョンでは、AWS SDK はデフォルトで署名バージョン 4 を使用してリクエストを認証します。2016 年 5 月以前にリリースされた AWS SDK を使用する場合、次の表に示すように、署名バージョン 4 のリクエストが必要になることがあります。

[s3] use-sigv4 = True

 

5af85bf0

https://github.com/fuel/core/wiki/Changelog-v1.6

見つからず。

http://fuelphp.jp/docs/1.6/requirements.html

5.3.2

 

https://github.com/fuel/core/wiki/Changelog-v1.7

http://fuelphp.jp/docs/1.7/requirements.html

5.5+とある。

 

https://github.com/fuel/core/wiki/Changelog-v1.8

PHP 7 とある。

また、一部5.6+と。

 

https://github.com/fuel/core/wiki/Changelog-v1.8.1

PHP7.1とある。

 

git log –graph –oneline –decorate=full –date=short –format=”%C(yellow)%h%C(reset) %C(magenta)[%ad]%C(reset)%C(auto)%d%C(reset) %s %C(cyan)@%an%C(reset)” remotes/origin/1.8/master

  • c7e7a4a [2018-04-27] (tag: refs/tags/1.8.1.3) hash_equals is php 5.6+, add compatibility layer @WanWizard

ここで、5.6対応も入っていたりする。

その前は、1.7時台。

  • 8e774d4 [2015-11-13] split off php 5.6+ code to avoid syntax errors in older versions; closes #1952 @WanWizard

 

https://github.com/fuel/core/commits/1.9/develop

7.2, 7.3が。

 

PHP5.6 Fuelphp1.8

 

wget

 

epel

CentOS : EPEL リポジトリ追加

php5.5を入れるために

 

 

pip

CentOS 6 の python 2.6.6 に pip を導入する手順

 

aws cli

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/awscli-install-linux.html

php5.5

 

php-xml

こんなエラーが出たので、

 

 

となったので、

 

と作成

とできた。

普通にやると次のようなエラーが出てはまった

http://d.hatena.ne.jp/kadotanimitsuru/20090216/thread

あたりから辿り、

 

https://www.raspberrypi.org/forums/viewtopic.php?t=46096

で回避できた。

 

 

解説記事は色々流れているけど、実際に触ってみないと覚えないので。

歴史の整理

async / await は Promiseと関連している。まず、時系列を整理。

  • 昔の Node では Promise が独自実装されており。2010年頃 deprecate された、という話がある。
  • Node.js v0.11.13 より、ES2015/ES6 Promise が利用可能に
  • Node.js v7 より ES2017/ES7 async/await が利用可能に。

Promise

async / await を理解するにあたってはまずPromiseから。
例えば次のようなHTTPリクエストの非同期処理を考える。

 

この例では、★1まで処理が進行して関数を抜けてしまってから、★2が実行される。
node.js の イベントループモデルはそもそもがそういうものなのだけど、
やっぱり同期処理的に書いたり処理した方がいいよね、ということで可能にしたのがPromiseで、
次のように既存処理を括って書ける。

この場合、★1まで処理が進行した後、★2で応答を返すまで Promise が処理を返さない。
★2が実行されると、★3以降の処理が実行される、というもの。
ちなみに、上記の例で、呼び出し側は次のようになる。

 

async/await

async/awaitは、上記 Promise の呼び出しを簡略化して、
かつ、処理の流れ自体を同期化する仕組み。

async

async の簡単な説明、

  • async をつけた関数は、Promiseを返す
  • async function が return した場合、Promise は戻り値を resolve する。
  • async function が 例外等を throw した場合、Promise は、それを reject する。

要は、既存の関数をそのまま、同期処理に変えることができる。
しかし、ポイントがあって、あくまで「その関数」内の return / throw に作用するので、上記に示したような、ライブラリのコールバックには対応できない。(と思う)
なので、async で Promise 実装を簡潔化しよう、と思っても、Promise は残らざるを得ない。(はず)
※ async function って、「非同期で処理される関数です」じゃなくて、「非同期処理を含む関数(だけどPromiseで同期的に処理できる)です」ってことですね。ちょっと混乱した。

await

対して、await。

  • async function 内でしか使えない。
  • await を指定した関数の Promise が返却されるまで処理を待機する。

なので、await で同期的に待つ、という事をしたい場合は、その関数自身が async function である必要があり、
つまりは、Promise を返すことになり、つまりは、同期的に処理されうる関数になる。
なので、await で待つことを決めた時点で、その関数は同期的な関数になり、その関数が async function になることで、その上位の関数にも、同期関数になるかどうかの選択を与える、という連鎖が続く。
これが最上位まで続くと、そのコールスタック全てが同期的に処理されることが、言語的に保証される。
というものなんだな、という理解。
Promise を待つ場合、従来の then, catch が使えるので、await を使う必要は必ずしも無いが、処理を簡潔にさせる等の理由で使うという判断ができる。
上記の呼び出し例は、await を使うと、次のように書ける。

 

エラー処理のために、try – catch も、Promise 同様に then, catch を使うこともできるが、
catch を使った方が処理が簡潔に書ける。

 

async/await の伝搬

async function にすると、Promise が返されるので、呼び出し元では、await 等の Promise 的な処理を行う必要がある。なので、非同期処理が無いにも関わらず、async 化しておくのは無駄のように見える。
async/await モデルにおいては、async function にした時点で、呼び出し元には await を使うことになり、その関数も必然的に async function になるので、という連鎖が続くので、全てを async function にする必要が出てくる。
そうさせないためには、あえて、async function だけど同期的に処理されていることが保証されていて呼び出し元に伝搬させる必要がないから、await は用いず、Promise の処理を行って、async をつけない、ということを行う必要がある。
ということが正解なのかがよくわからない。

 

async/await を使った場合の、伝搬例

 

Lambda の Node.js

Node.js 8.10 ランタイムから、イベントハンドラ自体を async で記述できるようになっている。

 

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-prog-model-handler.html
なので、中の処理を同期的に書いてもいいよ、ということになっている。
async function では、await が使えるので、中で async function を定義して、コールしていくという作りにできる。

root, 非rootwを意識する必要がある

http://www.yunabe.jp/docs/python_package_management.html

 

# pip install paho-mqtt

-> /usr/local/lib/python2.7/dist-packages/paho

 

パスに権限がない場合

$ pip install paho-mqtt

-> /home/pi/.local/lib/python2.7/site-packages/paho

 

パスの違いに注意