20200211のMacに関する記事は13件です。

Intel Parallel Studio XE のインストール

What's this?

Intel Parallel Studio XE のインストールガイド
と言っても大した内容ではないけど.
環境は mac OS 10.14.6 Mojave で, Intel® Parallel Studio XE Composer Edition for C++ macOS (2020 Initial Release)Intel® Parallel Studio XE Composer Edition for Fortran macOS (2020 Initial Release) をインストールします.

Intel Parallel Studio XE Composer Edition for C++ のインストール

  1. Intel Developper Zoneのここから自分が使用しているOS(ここではmacOS)を選ぶ.(アカウントがない人は作ってください)
  2. C++ macOS を選ぶ.
  3. Full Package, Customizable Package のどちらでも好きな方をダウンロードする.このとき, Serial numberを控えておく.
  4. ダウンロードしたm_ccompxe_online_*.dmgを開いて, 指示に従ってインストールする. これでほぼ終わり(簡単).

Intel Parallel Studio XE Composer Edition for Fortran のインストール

今時Fortran使うの?って思うかもしれませんが, 実際使うことあるので一応ね...
「Fortranなんて使わんわ」って人は無視してください.
手順はIntel Parallel Studio XE Composer Edition for C++とほぼ同じです.
1. Fortran macOS を選ぶ.
2. Full Package, Customizable Package のどちらでも好きな方をダウンロードする.このとき, Serial numberを控えておく.
3. ダウンロードしたm_fcompxe_online_*.dmgを開いて, 指示に従ってインストールする.

環境変数の設定

$HOME/.bash_profile を編集して, ターミナルを起動するたびに環境変数を読み込むようにする.
$HOME/.bash_profile に次の1行を追加(デフォルトの/opt/intel/にインストールしたものとする).

source /opt/intel/bin/compilervars.sh intel64

mkltbb を使う場合は次も追加する.

source /opt/intel/mkl/bin/mklvars.sh
source /opt/intel/tbb/bin/tbbvars.sh

これで全て完了.
c,c++ のソースコードをコンパイルする場合は

$ icc *.c
$ icpc *.cpp

Fortran のソースコードをコンパイルする場合は

$ ifort *.f90
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでGitを最新版にアップデートする

はじめに

MacにプリインストールされているGitのバージョンが低かったのでアップデートした際のメモです。

Update

まずは現状のバージョンを確認。

$ git --version
git version 2.10.1

(うーん、低かった...)

調べたところ、brewでアップデートおよび管理するのが一番手軽そうだったのでbrewにてインストール。
事前にbrewのインストール済みパッケージを確認したい場合には以下のコマンドを実行。

$ brew ls

では、導入開始。

$ brew install git
 :
 :
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/git
Target /usr/local/bin/git
already exists. You may want to remove it:
  rm '/usr/local/bin/git'

To force the link and overwrite all conflicting files:
  brew link --overwrite git

To list all files that would be deleted:
  brew link --overwrite --dry-run git
 :
 :
Error: Permission denied @ apply2files - /usr/local/.....

予想に反してやたらとエラーが...
とりあえず、慌てずにバージョンを確認。

$ git --version
git version 2.10.1
$ brew ls | grep git
git
$ brew info git
git: stable 2.25.0 (bottled), HEAD
 :

Gitのバージョンは変わってないが、brewによりバージョン2.25.0のインストールはされている。
エラーメッセージの通り、インストールはできたがシンボリックリンクが作れなかったってことだ。
というわけで、エラーメッセージに記載のコマンドでシンボリックリンクをオーバーライドしてみる。

$ brew link --overwrite git
Linking /usr/local/Cellar/git/2.25.0_1... 208 symlinks created
$ git --version
git version 2.25.0

これで今度こそバージョンアップ完了!

もう一つ出ていたエラー Permission denied @ apply2files はbrewのIssue #45009のコメント が参考になりそう。
あとでトライしてみる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ローカルからリモート Jupyter を一つのコマンド/アプリケーションで使う (Mac)

以下のコードはこの Gist にも上げてある。

目的

最近では JupyterLab とか Visual Studio Code とか便利なサービスも増えてきたが、動作が重かったりしてなんだかんだいまだにバニラの Jupyter をブラウザで開いている、という人はそれなりにいるんじゃないかと思う。

計算資源だったりの観点から、リモートの Jupyter を (起動はサーバで行って) ローカルのブラウザで開くという需要はかなりあって、実際それは SSH Forwarding を使うことで実現できる。

この SSH Forwarding を使った、ローカルからのリモート Jupyter の接続方法については数多くの記事があるが、そのほとんどが

  1. リモートで $ jupyter notebook コマンドを実行して Jupyter を起動
  2. ローカルで $ ssh ... コマンドを実行してポートフォワーディングしてブラウザを開くと Jupyter の画面が現れる

という2段階のステップを取っている。最終的にやりたいのは「ブラウザでリモート Jupyter のタブを開くこと」だけなのに、これを毎回やるのは正直面倒くさい。さらに言うなら、上のコマンド打ち込むためにターミナルを開くことすら本質的ではない。

この記事では、まずこの処理をすべて行うスクリプトを作って、さらに Mac の Automator を使ってそのスクリプトを実行するアプリケーションを作る。これによって例えば、ターミナル等を経由しなくても Spotlight からすぐにリモートの Jupyter を起動できる。Windows/Linux では試していないが、スクリプトまではある程度共通して使えると思う。

前提知識

  • SSH ポートフォワーディングを使ったリモート Jupyter の使い方
  • Automator の基本的な使い方

本題

例えば以下のページを参考に、あらかじめリモートで Jupyter の設定をしておく。

この時点で、以下のような流れでローカルからリモートの Jupyter に接続できるようになっているはず。

  1. リモートで $ jupyter notebook
  2. ローカルで $ ssh -N -f -L ローカルでのポート番号:localhost:リモートのJUPYTERで設定したポート番号 ホスト名
  3. ローカルのブラウザで http://localhost:ローカルでのポート番号 にアクセス

これらを全部やってくれるスクリプトを書いて、ローカルのホームディレクトリに remote_jupyter.sh という名前で保存する (リモートのログインシェルの設定ファイルを $HOME/.bash_profile でハードコードしていたりするので、異なる場合は適宜修正する; 中身の詳細については次節で少し触れる):

local-$HOME/remote_jupyter.sh
HOST_NAME=ホスト名
PORT_ID_LOCAL=ローカルでのポート番号
PORT_ID_REMOTE=リモートのJUPYTERで設定したポート番号
# Specify "direct" or "sge"
EXEC_TYPE="sge"

# Commands for checking existing jupyter process and for running jupyter
# Put `run_jupyter.sh` at the home directory in the remote environment if using a job scheduler
if [ ${EXEC_TYPE} = "direct" ]; then
    CHECK_JUPYTER="ps x"
    RUN_JUPYTER="nohup jupyter notebook >/dev/null 2>&1 &"
elif [ ${EXEC_TYPE} = "sge" ]; then
    CHECK_JUPYTER="qstat"
    # Options other than those specified here should be given in the remote file
    RUN_JUPYTER="qsub -N jupyter_nb -pe smp 4 -l hostname=${HOST_NAME} run_jupyter.sh"
else
    echo "Invalid value of `EXEC_TYPE`: ${EXEC_TYPE}"
    exit 1
fi

# Open the port
lsof -s TCP:LISTEN -i :${PORT_ID_LOCAL} | awk 'NR > 1 {print $2}' | uniq | while read PID; do kill -KILL ${PID}; done

# Run jupyter if not existing
N_JUPYTER_PROC=$(ssh ${HOST_NAME} "${CHECK_JUPYTER}" | grep "jupyter" | wc -l)
if [ ${N_JUPYTER_PROC} = 0 ]; then
    ssh ${HOST_NAME} "source ~/.bash_profile; ${RUN_JUPYTER}"
    sleep 10
fi

# Start connection and then open a chrome tab
ssh -N -f \
    -L localhost:${PORT_ID_LOCAL}:localhost:${PORT_ID_REMOTE} \
    -o PermitLocalCommand=yes \
    -o LocalCommand="open -a '/Applications/Google Chrome.app' http://localhost:${PORT_ID_LOCAL}" \
    ${HOST_NAME} \
&

このスクリプトには 5 行目の EXEC_TYPE で Jupyter の実行のしかたを選べる。デフォルトの EXEC_TYPE="sge" だと、SGE でジョブとして投げて実行する (当然だがリモート環境に SGE がインストールされている必要がある; スクリプトを適宜修正すれば SLURM なども使える)。この場合、リモートのホームディレクトリに以下のスクリプトファイルを run_jupyter.sh という名前で置いておく必要がある (SGE のオプションは適宜変更する):

remote-$HOME/run_jupyter.sh
#!/bin/bash
#$ -o sge.log
#$ -j y
#$ -S /bin/bash
#$ -cwd
#$ -V
#$ -q all.q

jupyter notebook

ジョブの CPU 数は最初の remote_jupyter.sh-pe smp 4 の部分で指定できる。上のままだと 4 コア。

一方で、EXEC_TYPE="direct" に変更すると、リモートで Jupyter をシェルから直接実行する (SSH ログインして $ jupyter notebook を実行するのと同じ)。

この時点で、ローカルのターミナルのホームディレクトリで以下のコマンドを実行するとブラウザが起動して Jupyter のタブが開くようになっているはず:

$ ./remote_jupyter.sh

あとは Automator を開いて、「アプリケーション」 -> 「シェルスクリプトを実行」から以下のコマンドを指定してアプリケーションを例えば jupyter_remote.app という名前で作成すれば、Spotlight -> jupyter_remote (実際には Mac がアプリケーション名を補完してくれるので ju くらいで十分) と打ち込むだけでブラウザで Jupyter のタブが開くようになる。

Automator-script
nohup $HOME/remote_jupyter.sh > /dev/null 2>&1 &

(余談) 何をやっているのか?

上のスクリプト (remote_jupyter.sh) で何をしているのかを少しだけ書く。

まず、

lsof -s TCP:LISTEN -i :${PORT_ID_LOCAL} | awk 'NR > 1 {print $2}' | uniq | while read PID; do kill -KILL ${PID}; done

の部分では、変数 PORT_ID_LOCAL で指定されたポート番号がローカルで使用済みの場合に、SSH 接続する前にそのポートを開放する。これは例えば今回のスクリプトを使って複数回 Jupyter を起動したい場合に必要で、前回の SSH 接続が残ったままで新しい SSH 接続ができなくなることを防ぐ。

その後、

N_JUPYTER_PROC=$(ssh ${HOST_NAME} "${CHECK_JUPYTER}" | grep "jupyter" | wc -l)
if [ ${N_JUPYTER_PROC} = 0 ]; then
    ssh ${HOST_NAME} "source ~/.bash_profile; ${RUN_JUPYTER}"
    sleep 10
fi

の部分で、リモートですでに実行されている Jupyter プロセスもしくはジョブがないか調べる。もしあれば何もせず、既存のものをそのまま使用する。もしなければ、新しく Jupyter を実行する。(sleep 10 不要かも。)

最後の、

ssh -N -f \
    -L localhost:${PORT_ID_LOCAL}:localhost:${PORT_ID_REMOTE} \
    -o PermitLocalCommand=yes \
    -o LocalCommand="open -a '/Applications/Google Chrome.app' http://localhost:${PORT_ID_LOCAL}" \
    ${HOST_NAME} \
&

この部分はよくある Jupyter SSH Forwarding のだいたいそのままで、接続後に Chrome を開くようにしている。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[備忘録]初めてのPython 開発環境を用意する

診療放射線技師、医学物理士をやっている者です。
プログラミングを学習していく過程を備忘録として記事に残していきます。
今後誰かの参考になれば幸いです。

スキルとして漠然とプログラミングを始めたくて、最初に手をつけたのがProgateでした。
ホリエモンがオススメしていた影響です。
いろんな言語のチュートリアルを一通りクリアして、Pythonをメインに勉強することにしました。
Web、アプリ、データ分析など汎用的に使えそうで、人口も多そうだったのと、
仕事柄機械学習が研究テーマとしてホットだったことが決め手です。

今回は、実際に自分のPCでPythonを動かしたはじめの一歩についてです。

全ては環境構築から

PCを用意

Pythonを扱っていくにあたり、まずは自分のPC上でPythonを動かす環境を用意する必要があります。
(※私はMacユーザーです。)

<必要なもの>
・PC

高いPCは(とりあえずは)必要ないようです。
PC一つでプログラミングを始められるのは、敷居が低くてありがたいです。

Anacondaをインストール

手元にPCを用意できれば、次にPythonをインストールします。
と言っても、実はMacにはPythonが標準搭載されている、らしい。
インストールしなくても使えないことはないのですが、バージョンが古いもののようなので、最新のバージョンをインストールしたいところです。(やりたい処理によってはバージョン2.7(2系)の方が適切である場合もあります。初心者はとりあえずバージョン3.7(3系)をインストールしてしまって問題ないと考えています。)

Pythonをインストールする方法がいくつかある中で、私は定番のAnacondaを使いました。
AnacondaにはPython本体の他に、機械学習においてよく使われるライブラリ等もセットで入っており、よく分からない初心者でもとりあえずこれさえあれば始められます。

「Python欲張りセット」と言ったところでしょうか。

以下のURLから無料で簡単にAnacondaをダウンロードできます。
https://www.anaconda.com/distribution/

スクリーンショット 2020-01-24 20.06.30.png

手順に従ってAnacondaのインストーラーのダウンロード、
Anacondaのインストールを行います。

動作確認

インストールが完了すると、PATHも通り、すぐに使える状態だと思います。
(※Mac OSのバージョンによっては、自分でPATHを追加する必要があります!)

Finderからターミナルを起動し、動作確認をしてみます。
スクリーンショット 2020-01-24 20.53.27.png

ターミナルを起動できたら、以下を打ち込んでEnterを押します(コマンドを実行)。

python --version

"Python 3.7.4" と表示されます。

次は、

conda --version

"conda 4.7.11"と表示されます。
問題なく動作しています。

さらに詳しいAnacondaのインストール方法は、ネット上で優しい方々がたくさん共有してくれています。
またターミナルの使い方も勉強しておくと後々困らないです。

初めてのPythonファイルを実行

早速Pythonデビューしてみます。
標準ソフトでも構いませんので、適当なテキストエディタで次のコードを入力し、"hello.py"という名前でデスクトップに保存します。(私は"Atom"というテキストエディタを使っています)
".py"というのがPythonファイルの拡張子です。

hello.py
print("Hello")

次にPythonファイルを実行してみます。実行にはターミナルを使用します。
ファイルを実行するには、ターミナル上でそのファイルが存在するディレクトリに移動する必要があります。
今回の場合はデスクトップに保存したので、デスクトップに移動すれば実行できます。
あるフォルダ内にファイルを保存したなら、そのフォルダに移動する必要があります。
ターミナルを起動すると、ホームディレクトリにいる状態からスタートです。
通常、デスクトップはホームディレクトリの直下にあるので、次のコマンドを実行してデスクトップに移動できるはずです。

cd desktop

デスクトップにある"Test"というフォルダに移動したい場合は

cd desktop/Test

で移動できます。
ひとつ前のディレクトリ(親ディレクトリ)に戻りたいときは、

cd ..

で戻れます。"cd"の後ろのスペースを忘れないように。
正しくディレクトリに移動できたら、実行あるのみです。
次のコマンドを実行します。

Python hello.py

ターミナル上に"Hello"と表示されれば成功です。
"Python ファイル名"と打ち込んでEnterを押すことでPythonファイルを実行できます。
無事に自分のPCでPythonを動かす環境を構築できました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS CLIでWordPress環境を構築する~part3~

概要

AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ~part3~

この記事では以下の作業を行う。

  • サブネットの作成(プライベートセグメント)
  • キーペアの作成
  • セキュリティグループの作成(DBサーバー用)
    • ルールの追加
  • EC2インスタンスの作成(DBサーバー用)
  • NATゲートウェイの作成
    • メインのルートテーブルにNATゲートウェイのルートを追加
  • MySQLのインストール
    • 初期設定
    • データベース作成
    • ユーザー作成と権限の設定
  • WordPressのインストール
    • PHPのインストール
    • MySQL Clientのインストール
    • WordPressのデプロイ

環境

  • macOS Catalina

前提条件

構築

サブネットの作成(プライベートセグメント)

項目
CIDRブロック 10.0.2.0/24
名前 test-PrivateSegment
# パブリックセグメントのアベイラビリティゾーンの取得
$ aws ec2 describe-subnets --subnet-ids subnet-02558655ff2936296
{
    "Subnets": [
        {
            "AvailabilityZone": "ap-northeast-1c",
            "AvailabilityZoneId": "apne1-az1",
            "AvailableIpAddressCount": 250,
            "CidrBlock": "10.0.1.0/24",
            "DefaultForAz": false,
            "MapPublicIpOnLaunch": false,
            "State": "available",
            "SubnetId": "subnet-02558655ff2936296",
            "VpcId": "vpc-07154996e6c851750",
            "OwnerId": "403733593576",
            "AssignIpv6AddressOnCreation": false,
            "Ipv6CidrBlockAssociationSet": [],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "test-PublicSegment"
                }
            ],
            "SubnetArn": "arn:aws:ec2:ap-northeast-1:403733593576:subnet/subnet-02558655ff2936296"
        }
    ]
}

# サブネットの作成
$ aws ec2 create-subnet --vpc-id vpc-07154996e6c851750 --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1c
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailabilityZoneId": "apne1-az1",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.2.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "pending",
        "SubnetId": "subnet-069512764e560f68e",
        "VpcId": "vpc-07154996e6c851750",
        "OwnerId": "403733593576",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:403733593576:subnet/subnet-069512764e560f68e"
    }
}

# 名前の設定
$ aws ec2 create-tags --resources subnet-069512764e560f68e --tags Key=Name,Value=test-PrivateSegment

キーペアの作成

項目
名前 test-db-key
秘密鍵のファイル名 test-db-key.pem
# ディレクトリの移動
cd ~/.ssh

# キーペアの作成
$ aws ec2 create-key-pair --key-name test-db-key --query 'KeyMaterial' --output text > test-db-key.pem

# 権限の変更
$ chmod 600 test-db-key.pem

# Webサーバーに転送
$ scp -i ~/.ssh/test-key.pem ~/.ssh/test-db-key.pem ec2-user@54.249.79.116:~/.ssh/

セキュリティグループの作成

項目
グループ名 DB-Segment
説明 DB Server security group
# セキュリティグループの作成
$ aws ec2 create-security-group --group-name DB-Segment --description "DB Server security group" --vpc-id vpc-07154996e6c851750
{
    "GroupId": "sg-0e8a4425f79c7e9ce"
}

 ルールの追加

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 0.0.0.0/0
MYSQL/Aurora TCP 3306 0.0.0.0/0
# SSHの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-0e8a4425f79c7e9ce --protocol tcp --port 22 --cidr 0.0.0.0/0

# MYSQL/Auroraの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-0e8a4425f79c7e9ce --protocol tcp --port 3306 --cidr 0.0.0.0/0

EC2インスタンスの作成

DBサーバー用のEC2インスタンスを作成する。

項目
AMI Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ t2.micro
自動割り当てパブリックIP 無効化
プライベートIP 10.0.2.10
名前 DB-Server

AMIのイメージIDはここで確認をする。

項目 既定値
ストレージタイプ gp2
ストレージサイズ 8G

ストレージタイプやサイズなどは既定値で作成をする。

# EC2インスタンスの作成
$ aws ec2 run-instances --image-id ami-011facbea5ec0363b --count 1 --instance-type t2.micro --key-name test-db-key --security-group-ids sg-0e8a4425f79c7e9ce --subnet-id subnet-069512764e560f68e --private-ip-address 10.0.2.10
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-011facbea5ec0363b",
            "InstanceId": "i-08f568e483f5aa14f",
            "InstanceType": "t2.micro",
            "KeyName": "test-db-key",
            "LaunchTime": "2020-02-11T05:43:28.000Z",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1c",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-2-10.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.2.10",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-069512764e560f68e",
            "VpcId": "vpc-07154996e6c851750",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "",
            "EbsOptimized": false,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2020-02-11T05:43:28.000Z",
                        "AttachmentId": "eni-attach-015e62e441a1e9e2f",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching"
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "DB-Segment",
                            "GroupId": "sg-0e8a4425f79c7e9ce"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "0a:12:3f:55:49:96",
                    "NetworkInterfaceId": "eni-028a866898abcebea",
                    "OwnerId": "403733593576",
                    "PrivateIpAddress": "10.0.2.10",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.2.10"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-069512764e560f68e",
                    "VpcId": "vpc-07154996e6c851750",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "DB-Segment",
                    "GroupId": "sg-0e8a4425f79c7e9ce"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled"
            }
        }
    ],
    "OwnerId": "403733593576",
    "ReservationId": "r-0260cad0308d0bbee"
}

# 名前の設定
$ aws ec2 create-tags --resources i-08f568e483f5aa14f --tags Key=Name,Value=DB-Server

NATゲートウェイの作成

# ElasticIP新しいアドレスの割当
$ aws ec2 allocate-address --domain vpc
{
    "PublicIp": "18.177.56.100",
    "AllocationId": "eipalloc-04495c62f9ec8db78",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "ap-northeast-1",
    "Domain": "vpc"
}

# NATゲートウェイの作成
$ aws ec2 create-nat-gateway --subnet-id subnet-02558655ff2936296 --allocation-id eipalloc-04495c62f9ec8db78
{
    "NatGateway": {
        "CreateTime": "2020-02-11T05:55:55.000Z",
        "NatGatewayAddresses": [
            {
                "AllocationId": "eipalloc-04495c62f9ec8db78"
            }
        ],
        "NatGatewayId": "nat-08e449a89a50dd47b",
        "State": "pending",
        "SubnetId": "subnet-02558655ff2936296",
        "VpcId": "vpc-07154996e6c851750"
    }
}

メインのルートテーブルにNATゲートウェイのルートを追加

項目
送信先 0.0.0.0/0
ターゲット NATゲートウェイ
# メインのルートテーブルを出力
$ aws ec2 describe-route-tables --filter Name="association.main",Values="true"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0b25cde6f32c2e053",
                    "RouteTableId": "rtb-03a6ba4c68af0a710",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-03a6ba4c68af0a710",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [],
            "VpcId": "vpc-07154996e6c851750",
            "OwnerId": "403733593576"
        }
    ]
}

# ルートの追加
$ aws ec2 create-route --destination-cidr-block 0.0.0.0/0 --route-table-id rtb-03a6ba4c68af0a710 --nat-gateway-id nat-08e449a89a50dd47b
{
    "Return": true
}

ssh接続

# Webサーバーに接続
$ ssh -i ~/.ssh/test-key.pem ec2-user@54.249.79.116

# DBサーバに接続
$ ssh -i ~/.ssh/test-db-key.pem ec2-user@10.0.2.10

MySQLのインストール

10.0.2.10
# RPMファイルのインストール
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

# MySQLのインストール
$ sudo yum install mysql-community-server -y

# MySQLサービスの起動
$ sudo systemctl start mysqld.service

# MySQLサービスのステータス確認
$ systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2020-02-11 06:38:54 UTC; 29s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 32524 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 32600 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─32600 /usr/sbin/mysqld

 2月 11 06:38:47 ip-10-0-2-10.ap-northeast-1.compute.internal systemd[1]: St...
 2月 11 06:38:54 ip-10-0-2-10.ap-northeast-1.compute.internal systemd[1]: St...
Hint: Some lines were ellipsized, use -l to show in full.

MySQLの初期設定

10.0.2.10
# 初期パスワードの出力
$ cat /var/log/mysqld.log | grep password

# 初期設定を行う 
$ mysql_secure_installation

WordPress用のデータベースの作成

10.0.2.10
# MySQLに接続
$ mysql -u root -p

# データベースの作成
$ CREATE DATABASE wpdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

# ユーザーの作成
$ create user 'wpadmin'@'localhost' identified by '■■■■■■■■■';
$ create user 'wpadmin'@'10.0.1.10' identified by '■■■■■■■■■';

# デーベースの操作権限を与える
$ grant all privileges on wpdb.* to 'wpadmin'@'localhost';
$ grant all privileges on wpdb.* to 'wpadmin'@'10.0.1.10';

# ユーザーの確認
$ select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| wpadmin          | 10.0.1.10 |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| wpadmin          | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

WordPressのインストール

PHPのインストール

10.0.1.10
# PHPのインストール
$ sudo amazon-linux-extras install php7.3 -y

# 拡張モジュールの出力
$ yum list php* | grep amzn2extra-php7.3

# 拡張モジュールのインストール
$ sudo yum -y install php-mysqlnd php-mbstring

MySQL Clientのインストール

10.0.1.10
# RPMファイルのインストール
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

# MySQLクライアントのインストール
$ sudo yum -y install mysql-community-client

# WebサーバーからMySQLの接続確認
$ mysql -h 10.0.2.10 -u wpadmin -p

WordPressのデプロイ

10.0.1.10
# 作業用ディレクトリの作成
$ mkdir ~/work

# 作業用ディレクトリに移動
$ cd ~/work

# WordPressのダウンロード
$ wget https://ja.wordpress.org/latest-ja.tar.gz

# 展開
$ tar xzvf latest-ja.tar.gz

# 展開したwordpressディレクトリに移動
$ cd wordpress/

# ファイルをApacheのDocumentRootディレクトリ配下にコピー
$ sudo cp -r * /var/www/html/

# 所有者の変更
$ sudo chown apache:apache /var/www/html -R

# Apacheの再起動
$ sudo systemctl restart httpd

実際にアクセスして確認をする
http://54.249.79.116

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS CLIでWordPress環境を構築する~part2~

概要

AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ ~part2~

この記事では以下の作業を行う。

  • キーペアの作成
  • セキュリティグループの作成(Webサーバー用)
    • ルールの追加
  • EC2インスタンスの作成(Webサーバー用)
  • Apacheのインストール

環境

  • macOS Catalina

前提条件

構築

キーペアの作成

項目
名前 test-key
秘密鍵のファイル名 test-key.pem
# ~/.sshディレクトリが存在しない場合は作成
mkdir ~/.ssh

# 権限変更
chmod 700 ~/.ssh

# フォルダの移動
$ cd ~/.ssh

# キーペアの作成
$ aws ec2 create-key-pair --key-name test-key --query 'KeyMaterial' --output text > test-key.pem

# 権限の変更
$ chmod 600 test-key.pem

セキュリティグループの作成

項目
グループ名 Web-Segment
説明 Web Server security group
# セキュリティグループの作成
$ aws ec2 create-security-group --group-name Web-Segment --description "Web Server security group" --vpc-id vpc-07154996e6c851750
{
    "GroupId": "sg-04520c52a1d8cc27f"
}

# 名前の設定
$ aws ec2 create-tags --resources vpc-07154996e6c851750 --tags Key=Name,Value=Web-Segment

 ルールの追加

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 0.0.0.0/0
HTTP TCP 80 0.0.0.0/0
# SSHの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-04520c52a1d8cc27f --protocol tcp --port 22 --cidr 0.0.0.0/0

# HTTPの有効化
$ aws ec2 authorize-security-group-ingress --group-id sg-04520c52a1d8cc27f --protocol tcp --port 80 --cidr 0.0.0.0/0

EC2インスタンスの作成

Webサーバー用のEC2インスタンスを作成する。

項目
AMI Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ t2.micro
自動割り当てパブリックIP 有効化
プライベートIP 10.0.1.10
名前 Web-Server

AMIのイメージIDはここで確認をする。

項目 既定値
ストレージタイプ gp2
ストレージサイズ 8G

ストレージタイプやサイズなどは既定値で作成をする。

# EC2インスタンスの作成
$ aws ec2 run-instances --image-id ami-011facbea5ec0363b --count 1 --instance-type t2.micro --key-name test-key --security-group-ids sg-04520c52a1d8cc27f --subnet-id subnet-02558655ff2936296 --private-ip-address 10.0.1.10 --network-interfaces '[ { "DeviceIndex": 0, "AssociatePublicIpAddress": true } ]'
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-011facbea5ec0363b",
            "InstanceId": "i-006e5f99c93e59b6a",
            "InstanceType": "t2.micro",
            "KeyName": "test-key",
            "LaunchTime": "2020-02-11T04:06:17.000Z",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1c",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-1-10.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.1.10",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-02558655ff2936296",
            "VpcId": "vpc-07154996e6c851750",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "",
            "EbsOptimized": false,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2020-02-11T04:06:17.000Z",
                        "AttachmentId": "eni-attach-0b6cc084839510e3b",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching"
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "Web-Segment",
                            "GroupId": "sg-04520c52a1d8cc27f"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "0a:d9:42:fc:f4:e4",
                    "NetworkInterfaceId": "eni-0ae3beb1595c7e0f1",
                    "OwnerId": "403733593576",
                    "PrivateIpAddress": "10.0.1.10",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.1.10"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-02558655ff2936296",
                    "VpcId": "vpc-07154996e6c851750",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "Web-Segment",
                    "GroupId": "sg-04520c52a1d8cc27f"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled"
            }
        }
    ],
    "OwnerId": "403733593576",
    "ReservationId": "r-043b930eee6f8945b"
}

# 名前の設定
$ aws ec2 create-tags --resources i-006e5f99c93e59b6a --tags Key=Name,Value=Web-Server

# パブリックIPを出力
$ aws ec2 describe-instances --instance-id i-006e5f99c93e59b6a --query "Reservations[].Instances[][PublicIpAddress]"
[
    [
        "54.249.79.116"
    ]
]

ssh接続する

$ ssh -i ~/.ssh/test-key.pem ec2-user@54.249.79.116

Apacheのインストール

10.0.1.10
# Apacheのインストール
$ sudo yum -y install httpd

# Apacheサービスの起動
$ sudo systemctl start httpd

# Apacheサービスのステータス確認
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2020-02-11 04:08:49 UTC; 7s ago
     Docs: man:httpd.service(8)
 Main PID: 3616 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           ├─3616 /usr/sbin/httpd -DFOREGROUND
           ├─3617 /usr/sbin/httpd -DFOREGROUND
           ├─3618 /usr/sbin/httpd -DFOREGROUND
           ├─3619 /usr/sbin/httpd -DFOREGROUND
           ├─3620 /usr/sbin/httpd -DFOREGROUND
           └─3621 /usr/sbin/httpd -DFOREGROUND

 2月 11 04:08:49 ip-10-0-1-10.ap-northeast-1.compute.internal systemd[1]: St...
 2月 11 04:08:49 ip-10-0-1-10.ap-northeast-1.compute.internal systemd[1]: St...
Hint: Some lines were ellipsized, use -l to show in full.

実際にアクセスして確認をする
http://54.249.79.116

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS CLIでWordPress環境を構築する~part1~

概要

AWS学習目的で、下記記事のレシピを参考にAWS CLIでの環境構築を行う。
【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ

この記事では以下の作業を行う。

  • VPCの作成
  • サブネットの作成(パブリックセグメント)
  • インターネットゲートウェイの作成
  • ルートテーブルの作成

環境

  • macOS Catalina

前提条件

  • AWSアカウント
  • AWS CLI
    • aws configureで設定済み

構築

VPCの作成

項目
リージョン アジアパシフィック(東京)
CIDRブロック 10.0.0.0/16
名前 test-VPC
# VPCの作成
$ aws ec2 create-vpc --region ap-northeast-1 --cidr-block 10.0.0.0/16
{
    "Vpc": {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-81eaa2e6",
        "State": "pending",
        "VpcId": "vpc-07154996e6c851750",
        "OwnerId": "403733593576",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0a6334afa0f843a96",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": []
    }
}

# 名前の設定
$ aws ec2 create-tags --resources vpc-07154996e6c851750 --tags Key=Name,Value=test-VPC

サブネットの作成(パブリックセグメント)

項目
CIDRブロック 10.0.1.0/24
名前 test-PublicSegment
# サブネットの作成
$ aws ec2 create-subnet --vpc-id vpc-07154996e6c851750 --cidr-block 10.0.1.0/24
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailabilityZoneId": "apne1-az1",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.1.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "pending",
        "SubnetId": "subnet-02558655ff2936296",
        "VpcId": "vpc-07154996e6c851750",
        "OwnerId": "403733593576",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:403733593576:subnet/subnet-02558655ff2936296"
    }
}

# 名前の設定
$ aws ec2 create-tags --resources subnet-02558655ff2936296 --tags Key=Name,Value=test-PublicSegment

インターネットゲートウェイの作成

項目
名前 test-IGW
# ゲートウェイの作成
$ aws ec2 create-internet-gateway
{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-069600493ea4658d1",
        "Tags": []
    }
}

# 名前の設定
$ aws ec2 create-tags --resources igw-069600493ea4658d1 --tags Key=Name,Value=test-IGW

# VPCにインターネットゲートウェイをアタッチ
$ aws ec2 attach-internet-gateway --vpc-id vpc-07154996e6c851750 --internet-gateway-id igw-069600493ea4658d1

カスタムルートテーブルの作成

項目
名前 test-PublicRouteTable
送信先 0.0.0.0/0
# カスタムルートテーブルの作成
$ aws ec2 create-route-table --vpc-id vpc-07154996e6c851750
{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-0e03cccb92108b0d1",
        "Routes": [
            {
                "DestinationCidrBlock": "10.0.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [],
        "VpcId": "vpc-07154996e6c851750",
        "OwnerId": "403733593576"
    }
}

# 名前の設定
$ aws ec2 create-tags --resources rtb-0e03cccb92108b0d1 --tags Key=Name,Value=test-PublicRouteTable

# インターネットゲートウェイへのすべてのトラフィック (0.0.0.0/0) をポイントするルートテーブルでルートを作成
$ aws ec2 create-route --route-table-id rtb-0e03cccb92108b0d1 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-069600493ea4658d1
{
    "Return": true
}

ルートテーブル サブネットの関連付け

$ aws ec2 associate-route-table  --subnet-id subnet-02558655ff2936296 --route-table-id rtb-0e03cccb92108b0d1
{
    "AssociationId": "rtbassoc-04f4894cba1ed2dab",
    "AssociationState": {
        "State": "associated"
    }
}

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac ゴミ箱に入れたディレクトリが削除できない..

問題:ダウンロードしたファイルの入ったディレクトリを削除できない

→「項目〇〇は使用中のため削除できない」とのメッセージが出る

結果:ファイルに権限を与えたら削除できました

(参考)
http://yagays.github.io/blog/2013/07/13/directory-permission/
https://support.apple.com/ja-jp/guide/mac-help/mchlp1203/mac

なんやかんや時間がかかってしまったので、その過程を備忘録として書きます。

1.削除したいディレクトリの構成

- maindir
    + dir1
        - file1
    + dir2
        - file2

2.試したこと(いずれも失敗)

関係ありそうなアプリを停止してからの削除
 → アクティビティモニタで該当アプリを選択し終了させた
(参考)https://support.apple.com/ja-jp/HT201464
セーフモード起動からのゴミ箱を空にする
(参考)https://support.apple.com/ja-jp/HT201583

3.ターミナルから直接コマンドを入力し、削除する方法を試みた

#ファイル削除の入力コマンド (警告なし。ディレクトリとその中身を問答無用で削除する。実行前要確認)
rm -rf ディレクトリ名  

(参考)ターミナルコマンドまとめ
https://qiita.com/ryouzi/items/f9dee1540a04a0bfb9a3

実行結果は、Permission deniedされた。

#実行結果
$ rm -rf /maindir [削除したいディレクトリパス]
rm:/maindir/dir1/file1: Permission denied
rm:/maindir/dir2/file2: Permission denied

なぜか拒否された、、一度ディレクトリの権限について調べてみた。

:file1$ ls -l 
total 0
srwx------  1 daemon  daemon  0  2  4 08:36 file1

#その他ユーザーの権限がない模様

(参考)chmodコマンド
https://do-zan.com/mac-terminal-chmod/

ターミナルからchmodコマンドで権限付与を試みたがうまくいかず。

4.Finderからファイルに権限を付与をしてみた

1)ゴミ箱にある削除したいデータを右クリックし情報をみる

スクリーンショット 2020-02-11 16.38.08.png

2)アクセス権を確認。今回の場合読み出しのみとなっていたので、ロックを解除し「読み書き」を選択する
スクリーンショット 2020-02-11 16.39.09.png

そのあとターミナルで該当ディレクトリまでcdし、rm -rfコマンドを入力して削除できました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】PC起動時にRTSP対応のカメラ映像を自動再生

概要

Macを起動した際に自動でストリーミング配信映像を再生する方法について書きたいと思います。
展示会や説明会などでPCを起動したら自動でストリーミング配信映像を流したい時に活用

  • 手順
    • ffplayでストリーミング映像を表示出来るか確認
    • ffplayを実行するスクリプトを書く
    • Macで上記スクリプトを起動時に実行するように設定
    • 確認方法

実施手順

① ffplayでストリーミング映像を表示出来るか確認
まずffplayを実行するためにbrewでダウンロード。ffmpegをDLすると一緒にffplayが入ります。

$ brew install ffmpeg

次にffplayでRTSPプロトコルの映像を再生

$ ffplay rtsp://ユーザ名:パスワード@IPアドレス:ポート番号/動画再生URL
例)$ ffplay rtsp://admin:hogehoge@192.168.1.100:554/axis-media/media.amp

② ffplayを実行するスクリプトを書く
シェルスクリプトを書く

$ cat rtsp.sh
#!/bin/bash

# 下記rtspは適宜置き換える
/usr/local/bin/ffplay rtsp://admin:hogehoge@192.168.1.100:554/axis-media/media.amp

実行権限を付ける

$ chmod +x rtsp.sh

③ Macで上記スクリプトを起動時に実行するように設定
~/Library/LaunchAgents配下にplistを作成。今回はrtsp.plistという名前で作成
※ /Users/ユーザ名/rtsp.shの部分は②で作成したシェルスクリプトを指定

$ cat rtsp.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>test</string>
    <key>Program</key>
    <string>/Users/ユーザ名/rtsp.sh</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

plistの設定を反映させる

$ launchctl load ~/Library/LaunchAgents/rtsp.plist

④ 確認方法

Macを再起動してストリーミングが自動で再生出来たらOK。
再起動に時間がかかる場合は以下のコマンドを実行することで確認が出来ます。

$ launchctl unload ~/Library/LaunchAgents/rtsp.plist
$ launchctl load ~/Library/LaunchAgents/rtsp.plist
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】PC起動時にRTSP対応のカメラ映像を自動再生

概要

Macを起動した際に自動でストリーミング配信映像を再生する方法について書きたいと思います。
展示会や説明会などでPCを起動したら自動でストリーミング配信映像を流したい時に活用

  • 手順
    • ffplayでストリーミング映像を表示出来るか確認
    • ffplayを実行するスクリプトを書く
    • Macで上記スクリプトを起動時に実行するように設定
    • 確認方法

実施手順

① ffplayでストリーミング映像を表示出来るか確認
まずffplayを実行するためにbrewでダウンロード。ffmpegをDLすると一緒にffplayが入ります。

$ brew install ffmpeg

次にffplayでRTSPプロトコルの映像を再生

$ ffplay rtsp://ユーザ名:パスワード@IPアドレス:ポート番号/動画再生URL
例)$ ffplay rtsp://admin:hogehoge@192.168.1.100:554/axis-media/media.amp

② ffplayを実行するスクリプトを書く
シェルスクリプトを書く

$ cat rtsp.sh
#!/bin/bash

# 下記rtspは適宜置き換える
/usr/local/bin/ffplay rtsp://admin:hogehoge@192.168.1.100:554/axis-media/media.amp

実行権限を付ける

$ chmod +x rtsp.sh

③ Macで上記スクリプトを起動時に実行するように設定
~/Library/LaunchAgents配下にplistを作成。今回はrtsp.plistという名前で作成
※ /Users/ユーザ名/rtsp.shの部分は②で作成したシェルスクリプトを指定

$ cat rtsp.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>test</string>
    <key>Program</key>
    <string>/Users/ユーザ名/rtsp.sh</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

plistの設定を反映させる

$ launchctl load ~/Library/LaunchAgents/rtsp.plist

④ 確認方法

Macを再起動してストリーミングが自動で再生出来たらOK。
再起動に時間がかかる場合は以下のコマンドを実行することで確認が出来ます。

$ launchctl unload ~/Library/LaunchAgents/rtsp.plist
$ launchctl load ~/Library/LaunchAgents/rtsp.plist
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macのhomebrewでmysqlクライアントのみインストールする

Macのローカルに作った開発環境のmysqlに接続はしたいけどサーバーはインストールしたくなかったのでメモ

homebrewの確認

homebrewはインストール済みであることが前提です

$ brew -v
Homebrew 2.2.2
Homebrew/homebrew-core (git revision fdb53; last commit 2020-01-03)
Homebrew/homebrew-cask (git revision d9c8; last commit 2020-01-03)

mysql確認

$ mysql --version
-bash: mysql: command not found

入ってません。

インストール

brew install mysql --client-only
...
Error: invalid option: --client-only

あれ、エラーになってしまうようですね。どうやらこのコマンドだと私の環境ではインストールできないようです。

以下のコマンドでインストール出来ました。

brew install mysql-client

インストールできました。

...
######################################################################## 100.0%
==> Pouring mysql-client-8.0.18.high_sierra.bottle.tar.gz
==> Caveats
mysql-client is keg-only, which means it was not symlinked into /usr/local,
because it conflicts with mysql (which contains client libraries).

If you need to have mysql-client first in your PATH run:
  echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.bash_profile

For compilers to find mysql-client you may need to set:
  export LDFLAGS="-L/usr/local/opt/mysql-client/lib"
  export CPPFLAGS="-I/usr/local/opt/mysql-client/include"

パスを通す

ログにもありますが、パスを通さないと、「mysql」コマンドで呼び出せないようです。

$ mysql --version
-bash: mysql: command not found

以下のように.bash_profileに書き込んで、sourceコマンドで即時反映させればOKです。

$ echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

確認

$ mysql --version
mysql  Ver 8.0.18 for osx10.13 on x86_64 (Homebrew)

おつかれさまでした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AutomatorでYoutube動画自動再生してみた

Automatorとは

↓のアイコンでおなじみのMacアプリの操作自動化に使えるアプリです

automator_logo.jpg

今回はSafariでYoutubeのチャンネルページを開いて動画をクリックして再生させる処理を自動化したいと思います
また、AppleScriptも少し使ってみます

詳細は以下の動画で紹介しています

https://youtu.be/n3sgpBPugos

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

"brew doctor"で"A newer Command Line Tools release is available."と出るがアップデートが無い場合

症状

brew doctorを実行すると、コマンドラインツールズが最新化されているにも関わらず、最新になっていない旨のメッセージが出る。
ソフトウェアアップデートには何も出てこない。

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences or
https://developer.apple.com/download/more/.

対処

削除してから再インストール

$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install

参考

$ brew doctor «A newer Command Line Tools release is available» but Software Update cannot find it – Swiss Mac User 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む