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

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

Fedora22がシャットダウンできない

昨日(2015-09-29)から

  • CentOS7のKVM上のfedora22(mate)
  • Windows10のVirtualBox上のFedora22(mate)

がシャットダウンできない現象が起こっている
(GUIからシャットダウンするとログアウトするだけでシャットダウンされない)

コマンドから実行すると

$ sudo shutdown -h now
Failed to start poweroff.target: Access denied

Broadcast message from USER@HOST on pts/0 (...):

The system is going down for power-off NOW!

と表示されるだけで何も起こらない

ここを見るとselinuxが原因っぽいので,以下のコマンドでselinuxを無効にするとシャットダウンできる用になった

$ sudo /usr/sbin/setenforce 0

selinuxを永続的に無効にするには
以下の用にSELINUX=disabledに書き換えれば良い

$ sudo vi /etc/selinux/config
SELINUX=disabled

yum updateしたらkernel panicで起動しなくなった

環境

CentOS7.2上のKVM上のCentOS7.2で

状況

yum updateカーネル
3.10.0-327.22.2.el7.x86_64
から
3.10.0-327.28.2.el7.x86_64
アップデートされ,久しぶりに再起動するとKernel Panicで以下のメッセージが表示され,起動できていなかった

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID 1 Comm: swapper/0 Not tainted 3.10.0-327.28.2.el7.x86_64
Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
...

解決法

新しいカーネル(3.10.0-327.28.2.el7.x86_64)のinitramfsが生成されていないのが原因らしい

とりあえず,古いカーネル(3.10.0-327.22.2.el7.x86_64)で起動し

$ ls -l /boot | grep initramfs
-rw-r--r--. 1 root root 57613265  5月 31 10:42 initramfs-0-rescue-1016740bf95247ae941d721fac81bcaa.img
-rw-------. 1 root root 29887789  8月  8 10:14 initramfs-3.10.0-327.18.2.el7.x86_64.img
-rw-------. 1 root root 29886600  8月  8 10:14 initramfs-3.10.0-327.22.2.el7.x86_64.img
-rw-------. 1 root root 19841024  8月  8 10:14 initramfs-3.10.0-327.el7.x86_64.img

initramfs-3.10.0-327.28.2.el7.x86_64.imgがないので,以下のコマンドで生成

$ sudo depmod 3.10.0-327.28.2.el7.x86_64
$ sudo mkinitrd initramfs-3.10.0-327.28.2.el7.x86_64.img 3.10.0-327.28.2.el7.x86_64

$ ls -l /boot | grep initramfs
-rw-r--r--. 1 root root 57613265  5月 31 10:42 initramfs-0-rescue-1016740bf95247ae941d721fac81bcaa.img
-rw-------. 1 root root 29887789  8月  8 10:14 initramfs-3.10.0-327.18.2.el7.x86_64.img
-rw-------. 1 root root 29886600  8月  8 10:14 initramfs-3.10.0-327.22.2.el7.x86_64.img
-rw-------. 1 root root 29885799  8月 19 23:07 initramfs-3.10.0-327.28.2.el7.x86_64.img
-rw-------. 1 root root 19841024  8月  8 10:14 initramfs-3.10.0-327.el7.x86_64.img

grub.cfgの新しいカーネルのセクションを確認
セクション最終行の
initrd16 /initramfs-3.10.0-327.28.2.el7.x86_64.imgが抜けていたため,追記した

$ sudo vi /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-327.28.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-fdca8898-0b12-4e30-a4c6-abb66c8f1ddc' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  d03afdf1-35b8-4289-93fb-6363859211c4
        else
          search --no-floppy --fs-uuid --set=root d03afdf1-35b8-4289-93fb-6363859211c4
        fi
        linux16 /vmlinuz-3.10.0-327.28.2.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=ja_JP.UTF-8
        initrd16 /initramfs-3.10.0-327.28.2.el7.x86_64.img

これで,無事起動できるようになった


Reference

UbuntuにDropboxをインストールする

Ubuntu16.04で実行

パッケージマネージャからインストール

$ sudo apt -y install caja-dropbox
$ caja-dropbox start -i

すると

(dropbox:24401): GLib-GObject-WARNING **: cannot register existing type 'GdkDisplayManager'

(dropbox:24401): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed

(dropbox:24401): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

と表示されアカウント認証画面に移動しなかった.

手動インストール

dropbox failing to start on Ubuntu 14 – Dropbox Community によるとDropboxのバージョンが古いと同様の症状が出るらしいので 手動でインストールする

インストール

Linux マシンに Dropbox をインストールを参考に行う

$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
$ ~/.dropbox-dist/dropboxd

すればログイン画面が開くのでログインする

管理用スクリプトのインストール

$ wget https://www.dropbox.com/download?dl=packages/dropbox.py

でダウンロードしたdropbox.pyを適当な場所に保存.

設定

  • デーモン起動
$ ./dropbox.py start
./dropbox.py autostart y

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