やまものブログ

メモ書きブログです (^_^;A

Python インストール (Ubuntu 16.04)その2

Ubuntuクリーンインストールしたので、pythonを入れなおしました。
前回github から pyenv を入手して install しましたが、今回は別の方法を使いました。
手順は Ubuntu環境のPython のとおりです。

まず、必要なライブラリを apt でインストールします。
$ sudo apt update
$ sudo apt install build-essential libbz2-dev libdb-dev \
libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
libncursesw5-dev libsqlite3-dev libssl-dev \
zlib1g-dev uuid-dev tk-dev

次に、こちらからインストールに必要なファイルをダウンロードしました。
-rw-rw-r-- 1 user1 user1 17042320 2月 9 16:13 Python-3.7.2.tar.xz

以下の手順でインストール完了です。
$ tar Jxf Python-3.7.2.tar.xz
$ cd Python-3.7.2
$ ./configure --enable-shared
$ make
$ sudo make install
$ sudo ldconfig

この手順はこちらに記載されている通りでした。
ビルドしたコマンドは /usr/local/bin にインストールされ、python3.7 コマンドまたは python3 コマンドで起動できます。

コマンドが"python3" なのは意外で、末尾に'3'無しの "python" は相変わらず 2 でした。
$ python --version
Python 2.7.12

ちなみに、このインストールをする前から、下記のバージョンの python3 は存在していることに後から気が付きました。
$ python3 --version
Python 3.5.2

つまり、3.5.2でよければ、このインストールは必要なかったみたいです。
あと、個人的にショックだったのは、今までは "python" で 3を使っていたのは pyenvのおかげで、それ無しなら、"python3" (末尾に'3'あり)で使うのが流儀だったのですね… ここは改めなくては。

今後は '3'付きで、3.7.2を使っていきたいと思います
$ python3 --version
Python 3.7.2

Ubuntu 16.04LTS 久しぶりの "fstab" でハマったこと

自分のPCはデスクトップで、起動ドライブとは別にデータ用のHDDを内蔵しています。
そいつを /home1 に起動時にマウントさせるために、fstabに追記しました。

まず、UUIDを以下のいずれかのコマンドで確認します。
/dev/sdc2 は今回追加したパーティションですが、これはシステムに依存します。

$ sudo blkid /dev/sdc2

 

$ ls -l /dev/disk/by-uuid/ | grep sdc2


下記の1行を /etc/fstab に追記して自動マウントできました。

UUID=c2fc4e0d-00a5-46fc-9cb5-4167741b383d /home1 ext4 defaults 0 0


ここに至るまでに2つほど落とし穴に落ちました。

1)"defaults" を単数形"default"(末尾の's'が無い)にタイポした
2)オリジナルの fstab を fstab.0 にリネームした


まあ、1)はタイポなのでNGは当然ですが、2)はやや難易度が高かったです。

元のファイルを消したくない時に、".<数字>"で0から連番を追加するがあるのですが、よくなったようです。そこで、オリジナルを"_fstab.0"(冒頭に'_'を追加)に変更したら無事に起動できました。
# ".org"を追加でもいいのだろうか(未確認

Ubuntu 16.04LTS のランチャーの配置

久しぶりに 16.04LTS を使ってみると、ランチャーに配置されているのが個人的にNGであったことを思い出しました。以前は、まあいいか程度でそのまま使っていましたが、改めて調べてみるとありました。

Ubuntu 16.04 LTSのLauncherを画面下に配置する - クロの思考ノート

ここに書かれているとおりです
やり方は3種類ありますが、最も手っ取り早いのを使わさせてもらいました。
$ gsettings set com.canonical.Unity.Launcher launcher-position Bottom

この "gsettings"はデフォルトで入っているようで、apt install も不要でした。初めて見るコマンドでした。概要は "man gsettings"とか "gsettings help" で確認できます。公式サイトのマニュアルが GSettings: GIO Reference Manual なので、GNOMEの一部といったところでしょうか(確認)

ちなみに、元に戻すには前出のサイトで解説されているとおりこちらです。
$ gsettings set com.canonical.Unity.Launcher launcher-position Left

もしかして、にできなかなと期待してこれをやってみるとダメでした
$ gsettings set com.canonical.Unity.Launcher launcher-position Right
指定した値は有効な範囲内にありません

Ubuntu 16.04LTS にて "apt update"失敗

昨日、Ubuntu 18.04 が "EXT4-fs error (device sda2)" みたいなエラーでまともに起動できなくなりました。ドライブがもうダメになったのかと思われます。詳細は調べていませんが。モノは Samsung 840EVO 500GBで、購入してから4年半経過しています。保証は840PROなら5年あるようですが、EVOは3年とのこと。メインドライブが壊れたことはHDDでは何度か経験していましたが、SSDは今回初めてです。

新しいSSDドライブに Ubuntuクリーンインストールしました。バージョンは、今更ながら Ubuntu 16.04LTS です。petalinuxなるものを使うためです。
16.04LTS のインストールは、Windowsにて ISOこちらからダウンロードして、Rufus でUSBドライブに焼いて、起動ドライブを準備しました。

USBからブートして、特に悩むこともなく、デフォルト設定でSSDドライブからブートできところまでサクサク進められました そこで、ソフトウェアのアップデートを促されたのですが、18.04LTSにアップグレードするかと聞いてきます。気持ちはありがたいのですが、やむを得ない事情があるので仕方がない。Windowで例えると、主流の10をあえて避けて 7を使うみたいなもので、取り残されている感が寂しい

促されるままのアップデート(アップグレード?)は 18.04行きのようなので、コマンドラインから apt を使うことにしました。すると、見たこともないエラーに遭遇 これはドライブの問題じゃなくて、マザーボードに何らかの障害あがあるのか?!と焦りました

$ sudo apt update
         : <中略>
*** Error in `appstreamcli': double free or corruption (fasttop): 0x0000000001fa8dd0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7f8eca5e2725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7f8eca5eaf4a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f8eca5eeabc]
/usr/lib/x86_64-linux-gnu/libappstream.so.3(as_component_complete+0x439)[0x7f8eca96dd19]
/usr/lib/x86_64-linux-gnu/libappstream.so.3(as_data_pool_update+0x44a)[0x7f8eca96ef0a]
/usr/lib/x86_64-linux-gnu/libappstream.so.3(as_cache_builder_refresh+0x1c2)[0x7f8eca964272]
appstreamcli(ascli_refresh_cache+0x12e)[0x4049de]
appstreamcli(as_client_run+0x6fb)[0x403ceb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f8eca58b830]
appstreamcli(_start+0x29)[0x403519]
======= Memory map: ========
00400000-00408000 r-xp 00000000 08:02 8126514 /usr/bin/appstreamcli
00607000-00608000 r--p 00007000 08:02 8126514 /usr/bin/appstreamcli
00608000-00609000 rw-p 00008000 08:02 8126514 /usr/bin/appstreamcli
01dd0000-03a25000 rw-p 00000000 00:00 0 [heap]
         : <中略>
7f8ecb6a9000-7f8ecb6aa000 rw-p 00026000 08:02 2625925 /lib/x86_64-linux-gnu/ld-2.23.so
7f8ecb6aa000-7f8ecb6ac000 rw-p 00000000 00:00 0
7f8ecb6ac000-7f8ecb6b1000 rw-p 00000000 00:00 0
7ffd51e59000-7ffd51e7a000 rw-p 00000000 00:00 0 [stack]
7ffd51e93000-7ffd51e96000 r--p 00000000 00:00 0 [vvar]
7ffd51e96000-7ffd51e98000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)
パッケージリストを読み込んでいます... 完了
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
E: Sub-process returned an error code



しかし、エラーメッセージで検索すると、ちゃんと回避方法が親切に解説されていました

Ubuntu 16.04のapt updateでappstreamcliがクラッシュする

Ubuntu 16.04のapt updateでappstreamcliが固まりアップデートができない問題

上記サイトに掲載されているとおりで解消できました
そのままコピペさせてもらいます。ありがとうございましたm(__)m

#appstreamを無効化
sudo killall -KILL apt.systemd.daily
sudo mv /etc/apt/apt.conf.d/50appstream /etc/apt/apt.conf.d/50appstream.disable
#apt update/upgrade
sudo apt update -y
sudo apt upgrade -y
#appstreamを有効化して再度update
sudo mv /etc/apt/apt.conf.d/50appstream.disable /etc/apt/apt.conf.d/50appstream
sudo apt update -y


本題じゃないですが、aptコマンドに "-y" をつけると、"[Y/n]"の確認を自動で"Y"扱いにしてくれるのですね。今まで知りませんでした。これ便利です

Brackets テキストエディタ

オープンソーステキストエディタBracketsUbuntuインストールしました。
バージョンはこちらのとおり。
まず、Brackets のインストールはGUIツール「Ubuntuソフトウェア(3.28.1)」でも可能ですが、インストールされたBrackets では何故か日本語入力ができませんでした。

そこで、下記の公式サイトで提供される.debファイルを使いました。
Brackets - Web デザインを認識する最新のオープンソースコードエディター

.debファイルの名称はこちらです。

インストールのコマンドは以下とおりでいいはずです。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install gconf-service libgconf-2-4 libpango1.0-0 libcurl3
$ sudo dpkg -i Brackets.Release.1.13.64-bit.deb

実際は下記のエラーに遭遇しました。上記 "apt install ..."はこれの対策です。
dpkg: 依存関係の問題により brackets の設定ができません:
brackets は以下に依存 (depends) します: gconf-service ...しかし:
パッケージ gconf-service はまだインストールされていません。
brackets は以下に依存 (depends) します: libgconf-2-4 (>= 2.31.1) ...しかし:
パッケージ libgconf-2-4 はまだインストールされていません。
brackets は以下に依存 (depends) します: libpango1.0-0 (>= 1.22.0) ...しかし:
パッケージ libpango1.0-0 はまだインストールされていません。
brackets は以下に依存 (depends) します: libcurl3 ...しかし:
パッケージ libcurl3 はまだインストールされていません。

このエラーの後に "sudo apt upgrade" すると下記のコマンドを要求されます。
$ sudo apt --fix-broken install

要求されたとおりに実行したら、あとは、"apt upgrade" から進めればOKでした。
なお、このブログ記事の現行は Brackets で入力しています

PDFの連結 pdftk (Yahooカレンダ Exportもどき)

あけましておめでとうございます

PDFファイルを連結する方法についてのメモです。
こちら↓を参考にさせていただきました。
コマンドラインでpdfを連結する方法

"pdftk" コマンドを使います。
まずは、そのインストールからでした。
snap というコマンドは初めて使いました。
$ sudo snap install pdftk

連結したいファイルです。
$ ls 17*.PDF
1701.PDF 1702.PDF 1703.PDF 1704.PDF 1705.PDF 1706.PDF 1707.PDF 1708.PDF 1709.PDF 1710.PDF 1711.PDF 1712.PDF
一昨年のカレンダをファイル名 "17<月>.PDF" で保存しています。

こんな風にして "Calendar2017.pdf" にまとめることが出来ました。
$ pdftk 17*.PDF cat output Calendar2017.pdf

コマンドの使い方をまとめ直すとこんな感じでしょうか。
$ pdftk <入力PDFファイル(複数)> cat output <出力PDFファイル>

一昨年は Yahooカレンダを使っていて、そのバックアップを取りました。
CSVなどの簡易なテキストで Export したかったのですが、メニューが見当たらず
各月ごとに「印刷」でPDFで保存して、それをマージした次第です

Dockerイメージ Ubuntu 16.04 (Ubuntu 18.04上で)

Ubuntu 16.04が必須なアプリケーションがあって、Dockerも検討中です。
以下、16.04 コンテナを立ち上げたところまでのメモです。

docker のインストール
こちらのサイトに記載のとおりです。助かりました m(_ _)m
Ubuntuにdockerをインストールする

前提ソフトとあわせて docker をインストール。リポジトリの追加も必要。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce


Ubuntu 16.04 のイメージ、ホストとフォルダを共有
こちら3つのサイトの情報を参考にさせてもらいました m(_ _)m

DockerでUbuntu 16.04 LTSのイメージを利用してみよう
Dockerのコンテナとホストで共有フォルダを設定する手順
Dockerにおけるコンテナのライフサイクル


以下の手順では Dockerfileによる build ではなくcommit を使っています。
知人から聞いたところでは、Dockerfileは配布を想定した仕組みで、dockerの本来の思想にあうやり方だそうですが、とりえあず試すなら Dockerfile を使わなくてもいいとのことでした。ここではとりあえず手っ取り早く試した手順です。
余談ですが、build って聞いたら ubuntu OS を buildするのかと思って気が遠くなりましたが、docker build は既にあるイメージを作り直すことらしいです。

まず、ホストのOSはこちらです。
Ubuntu 18.04.1 LTS

コンテナとディレクトリを共有するには ユーザIDを一致させる必要があるそうです。
そこで、まず、ホストでのIDを確認します。自分一人で使っているマシンだとたいがい 1000番だそうで、自分の環境もそのとおりでした。

$ id
uid=1000(user001) gid=1000(user001) groups=1000(user001),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare)

コンテナ側と共有するディレクトリを作っておきます。
ここではホームに docker というディレクトリを作りました。
$ mkdir /home/user001/docker

ubuntu:16.04 のイメージを pullして、コンテナを runして bash を実行します。
$ sudo docker pull ubuntu:16.04
$ sudo docker run -it -d --name ubuntu1604 ubuntu:16.04
$ sudo docker exec -it ubuntu1604 /bin/bash

コンテナ内rootのプロンプトになるので、ID 1000番のユーザを作成します。
ここでのユーザ名はホスト側と同じである必要はないらしいですが、より安全だと期待して一致させました。
root@3b612232ca5f:/# useradd -u 1000 -m -d /home/user001 user001 && chown -R user001 /home/user001

コンテナから exit して、stopします。
root@3b612232ca5f:/# exit
$ sudo docker stop ubuntu1604

このコンテナを commit でイメージとして保存します。
$ sudo docker commit ubuntu1604 ubuntu:16.04a

新しいイメージの名称(ubuntu:16.04a)はオリジナルに 'a'を続けてみました。

docker run で -v オプションでディレクトリを指定します。
-v には :(コロン)で区切ってHOST-DIRとCONTAINER-DIRを指定します。今回は両方同じ/home/user001/docker になっています。
$ sudo docker run -v /home/user001/docker:/home/user001/docker -it -d --name ubuntu1604a ubuntu:16.04a

bashでrootから、su で user001 に替わって、共有ディレクトリにファイルを作成してみました。
$ sudo docker exec -it ubuntu1604a /bin/bash
root@a142b50ad547:/# su user001
$ cd
$ id > docker/test_on_docker.txt

ホストでも同じファイル docker/test_on_docker.txt にアクセスできました。
操作に手慣れてきたら、Dockerfile を使った build も試してみたいです。


【おまけ】イメージの保存場所
/var/lib/docker 下のどこかにあるようです。
commit で新しいイメージを作る前の容量です。
$ sudo du -sh /var/lib/docker
355M /var/lib/docker
作成直後は 113MB増加しました。
468M /var/lib/docker/

【おまけ】man の使い方
docker の各コマンドを man で確認するにはこんなかんじです。
$ man docker-<コマンド名>

"man docker" だけだと各コマンドの説明はありません。


今年、最後のブログ投稿になります。今年は 49件のブログを投稿しました。週に1件をいちおうの目安にしているので、52件には少し足りませんでしたが、まあまあのペースは保てたかと思います。
2018年も残すところあと3時間を切りました。
みなさまよいお年を!