プログラミングとかLinuxとかの備忘録

プログラミング、Linuxでハマった箇所や環境構築のメモ

CentOS7にDNSサーバを立てる

dnsmasqのインストール

$ sudo yum -y install dnsmasq

設定

DNSの設定

サーバのIPの固定

$ sudo nmcli connection modify eth0 ipv4.address "192.168.1.2/24"
$ sudo nmcli connection modify eth0 ipv4.gateway "192.168.1.1"
$ sudo nmcli connection modify eth0 ipv4.dns "192.168.1.1"
$ sudo nmcli connection modify eth0 ipv4.method manual
$ sudo nmcli connection modify eth0 connection.autoconnect yes

に加え,上位DNS(192.168.1.1)の前にlocalhost(127.0.0.1)をDNSとして追加する

$ sudo nmcli connection modify eth0 ipv4.dns "127.0.0.1 192.168.1.1"

ネットワークの再起動

$ sudo nmcli connection down eth0 && sudo nmcli connection up eth0

ファイアウォールの設定

$ sudo firewall-cmd --permanent --add-port 53/tcp
$ sudo firewall-cmd --permanent --add-port 53/udp
$ sudo systemctl restart firewalld

サーバ起動

$ sudo systemctl start dnsmasq
$ sudo systemctl enable dnsmasq

使い方

サーバの/etc/hostsにIPとホスト名を追加していくだけ

$ sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.10 SERVER1
192.168.1.11 SERVER2

/etc/hosts変更後はdnsmasqを再起動する

$ sudo systemctl restart dnsmasq

CentOS7でDockerを動かす

ホスト情報

$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

$ uname -r
3.10.0-229.20.1.el7.x86_64

Dockerのインストール

$ sudo yum -y install docker

Docker実行ユーザの設定

Dockerのサービスを起動せずにdocker imagesとかを実行すると

$ docker images
Get http:///var/run/docker.sock/v1.20/images/json: dial unix /var/run/docker.sock: no such file or directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

エラーが発生したので,サービスを起動

$ sudo systemctl start docker
$ sudo systemctl enable docker

再びDockerを起動すると

$ docker images
Get http:///var/run/docker.sock/v1.20/images/json: dial unix /var/run/docker.sock: permission denied.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

権限がないらしいのでsudoで実行するか実行ユーザをdockerグループに追加する
今回は,実行ユーザをdockerグループに追加する (dockerグループが存在しなかったので作成した)

$ sudo groupadd docker
$ sudo gpasswd -a 実行ユーザ名 docker

サービスを再起動すると一般ユーザからアクセスできるようになった

$ sudo systemctl restart docker

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

後は使うだけ

Jupyter Notebook (IPython Notebook)をインストールして試す

使用環境

$ cat /etc/redhat-release 
Fedora release 23 (Twenty Three)

インストール

仮想環境作成

$ mkvirtualenv --no-site-packages --python /opt/python3.5.1/bin/python3.5 notebook
(notebook)$ pip install -U pip

IPythonNotebookのインストール

(notebook)$ pip install ipython jupyter

IPython4.0以上では,jupyterを別にインストールしないとipython notebookすると以下のエラーが発生する(ImportError: No module named notebook.notebookapp)

(notebook)$ ipython notebook
...
ImportError: No module named notebook.notebookapp

その他ライブラリのインストール

(notebook)$ pip install matplotlib
(notebook)$ pip install Cython pandas

この時点で自動でインストールされたものも含めると以下のパッケージ構成になる

(notebook)$ pip freeze
cycler==0.10.0
Cython==0.23.4
decorator==4.0.9
ipykernel==4.2.2
ipython==4.1.1
ipython-genutils==0.1.0
ipywidgets==4.1.1
Jinja2==2.8
jsonschema==2.5.1
jupyter==1.0.0
jupyter-client==4.1.1
jupyter-console==4.1.1
jupyter-core==4.0.6
MarkupSafe==0.23
matplotlib==1.5.1
mistune==0.7.1
nbconvert==4.1.0
nbformat==4.0.1
notebook==4.1.0
numpy==1.10.4
pandas==0.17.1
path.py==8.1.2
pexpect==4.0.1
pickleshare==0.6
ptyprocess==0.5.1
Pygments==2.1.1
pyparsing==2.1.0
python-dateutil==2.4.2
pytz==2015.7
pyzmq==15.2.0
qtconsole==4.2.0
simplegeneric==0.8.1
six==1.10.0
terminado==0.6
tornado==4.3
traitlets==4.1.0
wheel==0.24.0

IPython(Jupyter) Notebookを試す

ipython notebookで以下のような警告が出た.
jupyter notebookに変わったらしい.

(notebook)$ ipython notebook
[TerminalIPythonApp] WARNING | Subcommand `ipython notebook` is deprecated and will be removed in future versions.
[TerminalIPythonApp] WARNING | You likely want to use `jupyter notebook`... continue in 5 sec. Press Ctrl-C to quit now.

改めて

(notebook)$ jupyter notebook

とすると、以下のページが開く

f:id:vild:20200606170607p:plain
Jupyter Notebook 1

右上のNewからPython3を選択すると以下のようにNotebookが開く

f:id:vild:20200606170324p:plainf:id:vild:20200606170037p:plain
Jupyter Notebook 2,3

pandas,matplotlibの利用

numpyを使用してデータを作成

import numpy as np

X = [i*np.pi/180. for i in range(0, 180)]
Y = [np.cos(x) for x in X]

作成したデータをpandasのデータフレームに変換し,csvに書き出す

import pandas as pd

data1 = {"x": X, "y": Y}
data1_pd = pd.DataFrame.from_records(data1)

data1_pd.to_csv("data.csv")

csvからデータを読み込む

import pandas as pd

data = pd.read_csv("data.csv")

matplotlibを使用して読み込んだデータをプロットする

%matplotlib inline
import matplotlib.pyplot as plt

plt.plot(data["x"], data["y"])

以上をJupyter Notebookで実行した結果が以下のスクリーンショット

f:id:vild:20200606170035p:plain
Jupyter Notebook 4
f:id:vild:20200606165819p:plain
Jupyter Notebook 5

Linux用プロキシ設定いろいろ

プロキシ下でLinuxを使う際のメモ
を参考にした自分用のメモ

Fedora23 (Mate Desktop)を使用してプロキシ設定を行った

システム全体の設定

Fedora23では/etc/profile.d/が存在したため/etc/profile.d/proxy.shを作成し,実行権限を与えた

$ sudo vi /etc/profile.d/proxy.sh
HOST="ホスト名orホストIP"
PORT="ポート"
PROXY=${HOST}:${PORT}

export http_proxy=http://${PROXY}
export https_proxy=https://${PROXY}
export ftp_proxy=ftp://${PROXY}

export HTTP_PROXY=${http_proxy}
export HTTPS_PROXY=${https_proxy}
export FTP_PROXY=${ftp_proxy}

local_ip=$(echo 192.168.1.{1..255})
local_ip=${local_ip// /,}
export no_proxy=127.0.0.1,localhost,${local_ip}

$ sudo chmod u+x /etc/profile.d/proxy.sh

しかし,これではFirefox等がネットにつながらなかったので,上記の設定はやめGUIから設定を行った

$ mate-network-properties

f:id:vild:20200606174127p:plain
Linux Proxy 1

dnf

最終行にプロキシ設定を追加する

$ sudo vi /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=true
proxy=http://ホスト名:ポート

随時更新予定


References

virtualenvでOpenCVを使う

virtualenv上のpipではopencvをインストールできなかったが
Is it possible to run opencv (python binding) from a virtualenv? - Stack Overflow

I found the solution was that I had to copy over cv2.so and cv.py to the directory running the virtualenv, then pip install numpy. To do this on Ubuntu 12.04 I used.

とあった.

仮想環境の作成

$ mkvirtualenv --python /opt/python2.7.11/bin/python2.7 --no-site-packages opencv

OpenCVのインストール

$ sudo dnf -y install opencv-python

システムのPythonを使用してインストールされたパスの確認を行う

$ python -c "import cv; print cv.__file__"
/usr/lib64/python2.7/site-packages/cv.pyc

$ ls /usr/lib64/python2.7/site-packages/ | grep cv
cv.py
cv.pyc
cv.pyo
cv2.so

これらのファイルへのシンボリックリンクを仮想環境内に作成する

$ cd ${WORKON_HOME}/opencv/lib/python2.7/site-packages
$ ln -s /usr/lib64/python2.7/site-packages/cv* ./

ここで,OpenCVで使用するnumpyをインストールする

$ workon opencv
(opencv)$ pip install numpy
Successfully installed numpy-1.10.4

動作確認

$ workon opencv
(opencv)$ python
>>> import cv
>>> import cv2

問題なくimportできた

PhpStormのインストールと初期設定

インストール環境

Fedora23にPhpStorm10.0.3をインストールした

$ cat /etc/redhat-release
Fedora release 23 (Twenty Three)

ダウンロード

PhpStorm IDE :: JetBrains PhpStorm
Download Nowからダウンロードする

または,

$ wget https://download.jetbrains.com/webide/PhpStorm-10.0.3.tar.gz

PHP実行環境のインストール

PHPインタプリタをインストール

$ sudo dnf -y install php-devel

$ php --version
PHP 5.6.18 (cli) (built: Feb  4 2016 12:03:13) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

次に,PHPのデバッガをインストール

$ sudo dnf -y install php-pecl-xdebug

インストール・初期設定

$ tar xf PhpStorm-10.0.3.tar.gz

$ cd PhpStorm-10.0.3/bin
$ ./phpstorm.sh

PHP Interpreterの設定

File -> Settingsから以下の設定を行う

ローカルのPHP実行環境の設定

-> Languages&Frameworks -> PHPを開き,
Interpreter:の右の...から

+を押しPHP Executable/usr/bin/phpにする.

f:id:vild:20200606172721p:plain
PhpStorm1

LiveEditの設定

編集中のファイルのブラウザプレビューを自動的に更新するLiveEditを
Live Editing of HTML, CSS, and JavaScript
に従いインストールする

Google Chromeのインストール

LiveEditはGoogle Chromeしか対応していないのでGoogle Chromeをインストールする必要がある

  1. Chrome ブラウザからダウンロードしインストールする
  2. 拡張機能: JetBrains IDE Supportをインストールする

LiveEditプラグインのインストール

PhpStormのヘルプ(Live Edit)には LiveEditはデフォルトでインストール&有効化されていると書いてあったが,
インストールされていなかったので以下の手順でインストールした

  1. Pluginsの検索ボックスでLiveEditと検索
  2. Install JetBrains plugin...をクリック
  3. Installをクリックする

f:id:vild:20200606172808p:plainf:id:vild:20200606172810p:plain
PhpStorm 2,3

再起動するとBuild, Execution, Deployment -> Debugger -> Live Editから設定できるようになる
(UpdateAuto in (ms)に変更すると,CSSの変更等も自動で反映するようになる)

以上の手順でセットアップした後にRun -> Debug (Ctrl + F9)で自動リロードモードに入れる

その他

  • 行番号を表示: Editor -> General Appearance -> Show line numbers
  • 空白を表示 : Editor -> General Appearance -> Show whitespaces

Linuxでのユーザ/グループ操作

ユーザー管理

ユーザ作成

$ sudo useradd -u ${UID} --create-home ${USER_NAME}

UIDの変更

$ sudo usermod -u ${NEW_UID} ${USER_NAME}

$ id
uid=${NEW_UID}(${USER_NAME}) ...(省略)

パスワード変更

$ sudo passwd ${USER_NAME}

または

$ su ${USER_NAME}
$ passwd

所属グループの管理

  • 所属グループを追加
$ sudo gpasswd -a ${USER_NAME} ${GROUP}
  • 所属グループを削除
$ sudo gpasswd -d ${USER_NAME} ${GROUP}

sudoできるようにする

ユーザを

グループに追加する

$ sudo gpasswd -a ${USER_NAME} wheel

グループの管理

グループ作成

GIDの変更

$ sudo groupmod -g ${NEW_GID} ${GROUP_NAME}