20210111のLinuxに関する記事は10件です。

GoLand IDEをUbuntuにインストール

無料バージョンではありますが、GoLandエディタを自分のUbuntu環境にダウンロードしてみました。
参考にしたのは以下のサイトです。
Install Jetbrains GoLand Go IDE on Ubuntu
在Ubuntu安装JetBrains Goland IDE

snapdを使ってダウンロードする方法もありますが、今回はサイトからダウンロードする方向でいきました。

前提

  • 環境がUbuntu
  • Goはローカルにすでにダウンロード済み

ダウンロード

Linux用のバージョンをこちらでダウンロードします。
https://www.jetbrains.com/ja-jp/go/download/#section=linux

ダウンロードしたら展開して optフォルダに移します。
もちろん他のところでもOKらしいです。
移動したらシェルファイルを実行して立ち上げます。

$ cd Downloads

$ sudo tar xzf goland-2020.3.1.tar.gz -C /opt

$ ls -l /opt
total 12
drwx--x--x 4 root root 4096 11月 20 01:33 containerd
drwxr-xr-x 8 root root 4096  1月 11 23:19 GoLand-2020.3.1
drwxr-xr-x 3 root root 4096 11月 20 10:46 google

$ /opt/GoLand-2020.3.1/bin/goland.sh

このような画面が出てきますが、Do not import settingsを選んで進みます。

Screenshot from 2021-01-11 23-20-22.png

ライセンスは持っていないので、無料バージョンを使います。Evaluate for freeを選んで持っていないほうで進めると、最終的にこの画面にたどりつきます。

Screenshot from 2021-01-11 23-20-54.png

毎回シェルファイルを実行して立ち上げるのは面倒なので、以下のようにアプリケーションディレクトリにファイルを作成します。今回はバージョンが2020.3.1なので、以下のように記入します。バージョンが変わった場合は違うバージョン名を記入してください。

$ cd /usr/share/applications/

$ sudo vi Goland.desktop
[Desktop Entry]
Name=Goland
Comment=Goland IDE
Exec=/opt/GoLand-2020.3.1/bin/goland.sh
Icon=/opt/GoLand-2020.3.1/bin/goland.png
Type=Application
Terminal=false
Encoding=UTF-8

作ったファイルに権限を与えます。

$ sudo chown 自分のユーザー名 Goland.desktop

$ sudo chmod 755 Goland.desktop

これでアプリケーション内から開けるようになります。

Screenshot from 2021-01-11 23-40-17.png

ちなみにDesktopでも開きたい場合は、Desktopに先程のファイルをコピればいいです。

$ cp Goland.desktop /home/user/Desktop/

プログラムを書いてみる

New Projectを選びます。

Screenshot from 2021-01-11 23-43-40.png

すでに入っているGOROOTをもとにCreateします。

Screenshot from 2021-01-11 23-43-57.png

毎度おなじみのHello Worldを作ります。

Screenshot from 2021-01-11 23-51-04.png

上のRunメニューからRunを押すと go build hello.goが出てくるので、これをクリックします。

Screenshot from 2021-01-11 23-49-16.png

Hello Worldが出力されました!

Screenshot from 2021-01-11 23-51-09.png

以上です。無料バージョンなんで30日しか使えないぽいんですけどね、、、

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

Softether VPN serverをGUIで初期設定する

はじめに

この記事は前回の記事でserver側の構築を完了した人向けです。
済んでいない方は先にそちらからお願いします。

ユーザーのバッチ登録

注意と説明

過去にVPNを構築した経験があり、ユーザー登録バッチファイルを持っている方向けのセクションです。
今回が初めての人は次の#サーバー管理ツールのダウンロードまでスキップしてください。

バッチファイルの例

今回はユーザー登録とパスワード登録をバッチファイルで処理します。
書式は以下の通りです。

Hub hubname
UserCreate username /GROUP:groupname /NOTE:none /REALNAME:hogeyama tarou
UserPasswordSet username /password:password

バッチの実行

バッチの保存場所はどこでも構いません。
以下のコマンドで実行します。

/usr/local/vpnserver/vpncmd /server serveradress /in:/home/hoge/batch.txt

adressはlocalhostと入力しても構いません。

コマンドは正常に終了しました

と表示されれば完了です。

サーバー管理ツールのダウンロード

Clientのwindows PCにサーバー管理ツールをインストールします。
公式ダウンロードサイトよりSoftether VPN Server→Windows→Intel(x86 and x64)を選択してください。
一番上のrtm版をダウンロードしてください。

サーバー管理ツールのインストール

先程ダウンロードしたソフトをインストールします。
ダブルクリックで実行し、画面の指示に従ってください。
途中で以下の画面が表示されたときは一番下のサーバー管理マネージャーを選択してください。
image.png

マネージャーの起動と接続先登録

管理マネージャーを起動すると以下の画面になります。
image.png
ここで中心左側の新しい接続設定を選択してください。
image.png
接続設定名は任意に変更して構いません。
ホスト名はサーバーのグローバルipアドレスを入力し、これ以外は変更せずにOKをクリックしてください。

管理パスワードの設定

最初の画面に戻るので、先程設定した接続設定をダブルクリックして下さい。
コメント 2021-01-11 221320.png
すると以下のように管理パスワードを設定する画面が出てきますので任意に設定して下さい。
パスワードを変更しました、という画面が出たら成功です。

初期設定ウィザード

image.png
パスワードの設定が完了すると初期設定画面が出てきます。この画面では一番上のリモートアクセスVPNサーバーを選択してください。
現在の設定内容が初期化される、といった警告が表示されますが、初期設定をしているため問題ないないのではいを選択してください。
image.png
仮想hub名は既定でも構いません。設定したらOKを選択してください。
568274a7-5c65-f831-837c-43432695bde4.png
ダイナミックDNS機能(DDNS)の設定画面が出てきますが使わないので閉じるを選択してください。
コメント 2021-01-11 221320.png
IPsecなどの設定画面です。androidやwindows、iosでのOS標準の機能でVPNに接続できます。
今回はSoftetherクライアントソフトを用いてwindowsからのアクセスを行うためそのままOKを選択してください。
image.png
VPN Azureに関する設定です。利用しないので右下の無効にするを選択しOKをクリックして下さい。
image.png
VPN クライアント用の設定画面です。
セクション1.のユーザーを作成するを選択してください。
image.png
ユーザー作成画面です。
ユーザー名とパスワード(右側)を入力しOKを選択してください。
ユーザー(ユーザー名)を作成しました。と出れば成功です。OKを押して下さい。
コメント 2021-01-11 223234.png
ユーザーを更に追加したい場合はここから追加できます。
また、今せずに後から追加することもできます。
閉じるを選択してください。
image.png
またこの画面に戻るので閉じるを選択してください。

管理画面

image.png
これが管理画面のホームです。
詳しい使い方は公式ドキュメントを参考にして下さい。

初期設定の続き

ウィザードではやってくれない範囲の設定をします。
なお、この設定はあくまで私のクライアント環境下で使用するための設定ですのですべての人の動作を保証するものではありません。

ローカルブリッジ設定

管理画面ホーム右下のローカルブリッジ設定を選択してください。
image.png
この画面が出てくるので新しいローカルブリッジの定義から最初に作成した仮想hubを選択してください。
作成する種類では新しいtapデバイスとの...を選択してください
新しいtapデバイス名は任意に設定して構いませんが、無難にtap1などがおすすめです。
名前を入力したら右下のローカルブリッジを追加を選択してください。
警告が表示されますがはい、OKを選択して続行して下さい。

仮想NATの設定

管理画面ホームに戻り、最初に作成した仮想hubを選択して仮想hubの管理を選択して下さい
コメント 2021-01-11 224918.png
この画面になったら右下の仮想NATおよび...を選択して下さい。
image.png
この画面でSecureNAT機能を有効にするを選択して下さい。
OKを押して続行します。
右側のSecureNATの設定を選択して下さい。
コメント 2021-01-11 224918.png
右上MACアドレスの最初を00-ACに設定して残りはそのままにしてOKを選択して下さい。

VPNクライアントのダウンロード

Clientのwindows PCにクライアント接続ツールをインストールします。
公式ダウンロードサイトよりSoftether VPN Client→Windows→Intel(x86 and x64)を選択してください。
一番上のrtm版をダウンロードしてください。
image.png

クライアントのインストール

ダウンロードしたファイルを実行します。
最初の画面で次へを選択して下さい。
image.png
その後のこの画面で上のクライアントを選択して次へをクリックしてください
その後は画面の指示に従ってください。

クライアントの接続設定

image.png
インストール完了後にクライアント接続ツールが開きます。
この画面がクライアントのホームです。
上の新しい接続設定の作成を選択してください。
仮想LANカードのインストールを求められるのでそのままはいを選択してください
仮想LANカードの名前はそのままでOKを選択してください。
LANカードの作成完了後に上の新しい接続設定の作成をもう一度選択してください。
image.png
接続設定名は任意に設定して構いません。
ホスト名はサーバーのドメイン、
ポートは既定の443
仮想hub名は先程に作成した仮想hub名です。
プロキシの種類はあなたの環境に合わせて任意に設定してください。
右側のユーザー認証で初期設定ウィザードで作成したユーザーの接続情報を入力します。
すべて入力したらOKを選択してください。
クライアントのホームに戻るので、今設定した接続設定をダブルクリックして接続して下さい。
image.png
このような画面が出れば成功です。

おわり

よいVPNライフを!!

参考文献

公式ドキュメント
https://ja.softether.org/4-docs/1-manual/3._SoftEther_VPN_Server_%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB/3.3_VPN_Server_%E7%AE%A1%E7%90%86
公式ドキュメント-バッチ処理
https://ja.softether.org/4-docs/1-manual/6/6.2

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

Visual Studio Code のターミナルでlinuxコマンドを使う方法

WindowsのVSCodeでターミナルを開いたときに、Linuxコマンドを使えるように設定した時のメモ。

事前準備

この設定はGitBASHを使用する前提なので、下記サイトよりインストールしておく。
https://gitforwindows.org/

設定

VSCodeのsettings.jsonに下記を追加する
(settins.jsonの開き方はこちらを参照)

settings.json
  "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\git-cmd.exe",
  "terminal.integrated.shellArgs.windows": [
    "--command=usr/bin/bash.exe",
    "-l",
    "-i"
  ]

こうすると、ターミナルはGitBashで使っているコマンドを参照するよ。となる。

参考

https://code.visualstudio.com/docs/editor/integrated-terminal#_windows

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

Linux標準教科書 章末テスト解答

第1章 Linuxとは
(1) 基本ソフトウェアとして適切なものを選びなさい。
Windows
Linux

(2) 応用ソフトウェアとして適切なものを選びなさい。
Word
Excel

(3) Operating System の役割として適切なものを 2 つあげなさい。
共通部品の提供
リソース管理

(4) Linux について正しく述べているものを選びなさい。
Linux はカーネルとユーザランドによって成り立つ。

(5) パッケージを使って応用ソフトウェアを導入する利点を説明しなさい。
ソースコードをビルドする手間を省ける

第2章 無し

第3章 基本的なコマンド
(1) ファイルやディレクトリを参照するコマンドを記述しなさい。
ls

(2)/media/cdrom/の中身を最新更新日順に並べて表示するコマンドを選びなさい。
ls -lt /media/cdrom/

(3) 今いるパスを表示するコマンドを記述しなさい。
pwd

(4)/home/user フォルダにある test というファイルを/root/backup フォルダに移動します。以下の空欄に当てはまるコマンドを書きなさい。

mv /home/user/test /root/backup
ls /root/backup
合計 4
rw-r--r--. 1 root root 19 6 月 14 11:14 2012 test

(5) パス/etc の中のファイルで、ファイル名の一部に「resolv」という文字列が含まれるファイル
を検索するコマンドを記述しなさい。
find /etc -name resolv

第4章 正規表現とパイプ

(1)grep コマンドを利用し、行頭が a または b で始まる行を抽出できる正規表現を以下の 4 つの中から選びなさい
grep -e ^[ab]

(2)「ls /usr/bin | grep -e ^a..$」というコマンドを実行した場合、どのような結果になるか答えなさい。
/usr/bin以下のaからはじまるの3文字のディレクトリ名、ファイル名が表示される

(3) パス/etc の中にあるファイルでファイル名が conf で終わるものを grep とパイプを用いて記述しなさい。

ls /etc | grep conf$

(4)ls -l を実行した結果を ls-result ファイルに書き込む場合のコマンドを記述しなさい。

ls -l >> ls-result

(5)chkconfig --list の実行結果から iptables だけを絞り込んで表示するコマンドを grep を使って記述しなさい。
chkconfig --list | grep iptables

第5章 基本的なコマンド2

(1)sort コマンドの実行結果となるように、適切なオプションを付けなさい。

$ sort (-k 3) price
Digital Camera 9800
32-inch TV 49800
Blue-ray Recorder 59800

(2)uniq-sample というファイルに対して uniq コマンドを実行したときの実行結果を答えなさい。

red
blue
red
blue

(3)file1 と file2 の内容の違いを比較するコマンドを記述しなさい。

diff file1 file2

(4) 以下のコマンドを実行したところ、何も結果が表示されずコマンド待ち状態になりました。何が考えられるか答えなさい。

file1とfile2の内容が同じ

(5) パス /etc の ls コマンドの実行結果が保存されたファイル ls-etc の終わり 8 行分を表示する場合のコマンドを記述しなさい。

$ tail -n 8 ls-etc
wpa_supplicant
xdg
xinetd.d
xml
yp.conf
yum
yum.conf
yum.repos.d
解答: tail -n 8

第6章 viエディタ
vi を使用中の場合に、以下を実現するためのコマンドを答えなさい。
(1) カレント行から 3 行をコピーする。

3yy

(2) 文書内の abc という語句を検索する。

/abc

(3) 編集中のファイルを保存せずに強制終了する。

:q!

(4) 文書の 100 行目に移動する。

100G

(5) 文書中の「高野豆腐」を「絹ごし豆腐」に置換する。ただし g オプションを付けて実行する。

:%s/高野豆腐/絹ごし豆腐/g

第7章 管理者の仕事
(1)useradd で user を作りましたが、ログインすることができません。ログインできるようにする
には何が必要か答えなさい。

passwdコマンドでパスワードを登録する

(2) ユーザ user2 を削除する場合のコマンドを答えなさい。

userdel user2

(3) グループ penguin を作成する場合のコマンドを答えなさい。

groupadd penguin

(4) すでに作成済みのユーザ penguin のパスワードを変更する場合のコマンドを答えなさい。

passwd penguin

(5)su コマンドに-オプションを付けない場合と付ける場合の違いは何か、答えなさい。

-オプションを付けない場合は、カレントディレクトリを変更せずにrootでログインする
-オプションを付ける場合は、カレントディレクトリをrootのホームディレクトリに変更してログインする

第8章 ユーザ権限とアクセス権
(1) 以下のコマンドを実行した場合の実行結果を選びなさい。
umask 022
touch test
chgrp nobody test
ls -l test

  1. -rw-r--r--. 1 root nobody 18 5 月 29 18:51 2012 test

(2)chownfile のファイルモードを 755 にするためのコマンドを記述しなさい。

chmod 755 chownfile

(3)chownfile のファイルモードを 644 にするためのコマンドを記述しなさい。

chmod 644 chownfile

(4)umask 070 にした後 umask ファイルを作成した場合に設定されるファイルモードは以下のど
れでしょうか?

  1. -rw----r--. 1 user user 0 5 月 29 19:22 2012 umask

(5)umask 022 にした後 umask ファイルを作成した場合に設定されるファイルモードは以下のど
れでしょうか?

  1. -rw-r--r--. 1 user user 0 5 月 29 19:24 2012 umask

第9章 シェルスクリプト
(1)実行結果が解になるように、変数"LPI"に入力した値を出力しなさい。

$ LPI=linux
$ echo $LPI
linux
解答: $LPI

(2)以下のスクリプトの空欄を埋め、カレントディレクトリにファイルlpi.txtが存在しているか確認するスクリプトを完成させなさい。

!/bin/bash

if [ -f lpi.txt ]; then
echo file exists.
else
echo file does not exists.
fi
解答: else, fi

(3)以下のスクリプトの空欄を埋め、カレントディレクトリ内のすべてのファイル(サブディレクトリを除く)の種類を表示するスクリプトを完成させなさい。

#!/bin/bash

for i in ls
do
if [ ! -d $i ]; then
file $i
fi
done
解答: done

(4)次の動作をするシェルスクリプトを書きなさい。
1.実行すると、age:として年齢の入力を促される。
2.20以上の値を入れると'you can drink.'と出力される。
3.20未満の値を入れると、'you cannot drink.'と出力される。

#!/bin/bash

echo -n age:; read age

if [ $age -ge 20 ]; then
echo "you can drink."
else
echo "you cannot drink."
fi
(5)bashで、シェルスクリプトの中身を表示しながら実行(デバッグ)するにはどのようにしたらよいか答えなさい。

sh -xコマンドでシェルスクリプトを実行する
$ sh -x 9-9-4.sh
+ echo -n age:
age:+ read age
6
+ '[' 6 -ge 20 ']'
+ echo 'you cannot drink.'
you cannot drink.

第10章 ネットワークの設定と管理
(1) 以下のうち、一般的に使われるサーバーが使うポートについて、正しい組み合わせを選びな
さい。

  1. 22:SSH 80:HTTP 443:HTTPS

(2)traceroute コマンドの動作と利用方法を説明しなさい。

動作:送信先までに経由するゲートウェイを表示する
利用方法:pingコマンドで送信先から正常なレスポンスがないとき、経由ゲートウェイのルーティングが正しいか調べる。

(3) マシンに設定されている IP アドレスをコマンドで表示しなさい。

ip a

(4) マシンの DNS サーバー参照先として 8.8.8.8 を設定しなさい。

/etc/resolv.conf
nameserver 8.8.8.8

(5)192.168.100.20 からのアクセスを拒否するよう設定しなさい。

/etc/hosts.deny
sshd : 192.168.100.20

第11章 プロセス管理
(1)作成中のプログラムをシェルスクリプトから試行したところ、プロンプトが返ってこなくなった。どのような対処方法があるか。

CTRL + Cを押して、SIGINT(Interupt Signal)を送信する。
(2)シグナル番号とシグナル名の組み合わせとして正しいのは次のうちどれか。

4 SIGNUP:1,SIGINT:2,SIGKILL:9,SIGTERM:15

第12章 ファイル管理
(1)マシンのハードディスクのパーティションを確認するコマンドを記述しなさい。

#fdisk -l

(2)スワップファイルシステムについて説明しなさい。

メモリのデータを一時的にハードディスクに退避させるための領域

(3)ext3やext4がext2より優れている点を1つあげなさい。

ジャーナリング機能を採用しており、システム障害時にデータ損失のリスクを回避できる。

(4)ハードリンクとシンボリックリンクの違いを説明しなさい。

ハードリンクはデータの実体を直接参照する。(データの別名をつくるイメージ)
シンボリックリンクはデータの実体を間接的に参照する。(データのショートカットをつくるイメージ)

(5)ログインしているユーザのホームディレクトリの使用量を表示するコマンドを記述しなさい。

$ du -sh ~

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

Linux【ディレクトリコマンド】

はじめに

これは学習用のメモになります。

  • ディレクトリとはフォルダのことです。ファイルを格納するフォルダのこと。

1.cd(change directory)

cd [ディレクトリ]

ディレクトリを移動するコマンド

特別なディレクトリの指定

カレントディレクトリ、親ディレクトリ、ホームディレクトリには特別な指定方法がある

ディレクトリ 意味  指定方法 
カレントディレクトリ 現在自分がいるディレクトリ 「.」
親ディレクトリ 一つ上の階層のディレクトリ 「..」
ホームディレクトリ 「/home/ユーザー名」ディレクトリ 「~」
ルートディレクトリ 「/」ディレクトリ 「/」

2.pwd

pwd [オプション]   #ほとんどオプションをつけることはない

カレントディレクトリを表示するコマンド
今どこのディレクトリにいるのか教えてくれるコマンド

3.ls

ls [オプション][ディレクトリ・ファイル名] 

ファイルやディレクトリの一覧を表示するコマンド
今いるディレクトリの中に入っているフォルダ/ファイルがわかる

便利なパス名展開

パス名展開を使うと複数のファイルを一度に指定できる

パス名展開

記号 意味
* 任意の文字列
任意の1文字
具体例
#拡張子がhtmlのファイルの一覧を表示
$ls *.html
index.html home.html job.html

#zから始まり4文字で終わるファイルを表示
$ls /bin/z???
/bin/zcat /bin/zcmp /bin/znew

よく使うオプション

ls -l

ファイルの詳細情報を表示する

ls -a

隠しファイルも含めた全てのファイルを表示する

ls -F

ファイルの種別を表示

4.mkdir(make directory)

mkdir [オプション]<作成するディレクトリ名>

ディレクトリを作成するコマンド

よく使うオプション

-p

深いディレクトリを一度に作成する
-pオプションをつけるとtest,2019というディレクトリを事前に作らなくていい

$mkdir -p test/2019/08

5.rmdir(remove directory)

rmdir <ディレクトリ名>

空のディレクトリを削除するコマンド(空でないディレクトリを削除しようとするとエラーになります)
あまり使うことはない(ほとんどrmコマンドを使うことが多い)

6.パス

パスはディレクトリやファイルの住所情報。
ディレクトリの階層の区切りを「/」で表現する

パスの種類

1)絶対パス

絶対パスはルートディレクトリ(「/」)から始まるパス。

/home/kume/code/README.md

2)相対パス

相対パスはカレントディレクトリから始まるパス。

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

Raspberry Piのシステムモニタリング

1.この記事の内容

RaspberryPiのCPUやメモリ等のシステム状況をモニタリングする方法として,Netdataの導入方法を紹介します.
NetdataはDockerコンテナでHTTPサーバを起動し,ネットワーク内のWindows PCなどからブラウザでアクセスしてモニタリングする仕組みです.
Dockerを使用できる環境であれば,RaspberryPiでなくてもLinux環境上で利用できると思います.

1-1.使用環境

  • Raspberry Pi 3 Model B+
  • Windows 10(ブラウザでRaspberry Piのシステム状況をモニタリング)

2.Netdataの導入手順とモニタリング方法

  1. Raspberry PiにDockerをインストールする
    $ curl -sSL https://get.docker.com | sh
    
  2. dockerグループにユーザを追加
    $ sudo usermod -aG docker pi
    
  3. Dockerの動作確認
    $ docker run hello-world
    
  4. Netdata起動
    docker run -d --name=netdata \
    -p 19999:19999 \
    -v /proc:/host/proc:ro \
    -v /sys:/host/sys:ro \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    --cap-add SYS_PTRACE \
    --security-opt apparmor=unconfined \
    netdata/netdata
    
  5. ブラウザからアクセス(http://:19999/)
    CPUやRAMなどの推移がブラウザ上でリアルタイム(約1秒間隔)で更新されます.
    Netdata画面.png

docker run後,Netdataの停止と再開については,下記の手順で実行できます.

  • 停止
    $ docker stop netdata
    
  • 再開
    $ docker start netdata
    

3. Netdataのアンインストール

Netdata自体はDockerイメージを取り込むだけの為,Dockerをアンインストールするだけです.

$ sudo apt purge docker-ce
$ sudo rm -rf /var/lib/docker
$ sudo apt autoremove --purge

4.さいごに

Raspberry Piのシステム状況をリアルタイムで確認するためにNetdataを導入しました.
ページ右上からエクスポートや印刷ができますので,スナップショットの記録はこれらの機能で実現可能です.

Raspberry Pi 1にも導入しようと試みましたが,下記のメッセージが表示され,Dockerコンテナを起動できませんでした.
ARMv6に対応していないようです.Raspberry Pi Zeroでも同様かもしれませんので,ご注意ください.

5.関連リンク

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

nvidia製ドライバを入れようとするとUbuntu 20.04 が起動しなくなる問題

はじめに

ちょっと古いノートPCにUbuntu20.04を入れて再利用していたのですが、何度か設定変更のタイミングでGUIが表示されなくなる(ログイン画面までたどり着かない)トラブルが多発したので備忘録がてらメモ。

環境

Vaio VPCZ1(Geforce GT 330M, Coreシリーズ1世代目の化石PC)
Ubuntu 20.04.1 LTS

現象

nvidia のドライバーを、こんな感じでGUIからインストールしようとしたところ
(最近は勝手に必要なドライバを見つけてくれて、GUIでインストールできるんですね...)
Screenshot from 2021-01-09 15-05-52.png

下記のようなエラーでインストール失敗する
Screenshot from 2021-01-09 15-07-07.png

次に再起動するとログイン画面が出てこない
真っ黒画面にアンダースコア(キャレット)が点滅

原因

nVidia 340ドライバ(最新は340.108)は、Linuxカーネル5.4以上での動作をサポートしていない1
この影響で無理やりインストールするとGUI表示ができなくなってしまうようだ。
Support timeframes for Unix legacy GPU releases

対処

起動時に Escキーを押してリカバリーモードで起動
メニューから「root」を選択して以下を入力、nvidiaのドライバを削除する。

$ sudo apt-get purge nvidia*
$ sudo service lightdm stop

今(2021年1月)現在はLinuxカーネル5.8では動かないようなのでドライバのインストールはあきらめるか、より古いバージョンのカーネルの使用を検討する。

まとめ

特に古いPCにnvidiaドライバを入れるときは、
そのドライバが使用するLinuxカーネルのバージョンに対応するか確認すべし。

参考

Nvidia ドライバのせいで Ubuntu の GUI が起動しない時の対策

The installation of the NVIDIA display driver 340 fails in Kubuntu 20.10
ここがわかりやすかった。


  1. ここにあるように、有志が使用できるようにパッチを開発しているようではあるが、2021月1月現在linuxカーネル5.8ではうまくいっていない? 

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

fbterm で PDF を眺める

fbterm で PDF を眺める

w3m (w3m-img) はインライン画像を表示することができます. jfbterm の上で. と思っていたら最近は fbterm の上でも表示できるようです. ありがたい.

ranger はそんな w3m の力を借りて画像のプレビューができます. 設定ファイルを少しいじれば pdf や動画ファイルのプレビューもできます.

sc1.png
sc2.png

ということは

ranger は PDF を表示できるので私たちにもきっとできます. まずは PDF を画像にします.

ranger はどのようにして PDF をプレビューしているのでしょうか. その答えは $HOME/.config/ranger/scope.sh にあります. そんなファイルがない場合は ranger --copy-config=all してください. 162 行目辺りに次のようにあります:

$HOME/.config/ranger/scope.sh (162)
## PDF
application/pdf)
    pdftoppm -f 1 -l 1 \
    ...

なるほど PDF を画像に変換するには pdftoppm を使うようです. 詳しい使い方は man pdftoppm で得られます. 得てください.

PDF を画像に変換するコマンド
$ pdftoppm -png PDFファイル名 画像ファイルのプレフィクス

画像 (と化した PDF) を表示する

w3m はインライン画像を表示できるので w3m のために HTML を書きます. しかし彼は css を読めないことに気をつけてください. HTML 4.01 Transitional 以下で書きましょう.

w3m のための HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>ほげほげ.pdf</TITLE>
</HEAD>
<BODY>
<CENTER>
<DIV><IMG SRC="path/to/image/page-01.png" WIDTH="80%"></DIV>
<DIV><IMG SRC="path/to/image/page-02.png" WIDTH="80%"></DIV>
...
</CENTER>
</BODY>
</HTML>

そしてこの HTML を w3m で読めば画像に変換された PDF を眺めることができます.

test.gif

面倒なんじゃい

私たちはなんとか PDF を眺めることができました. しかし PDF を眺めたいと思うたびにこの操作を行うことはとても面倒です. 私たちにできる大抵のことはコンピュータにもできます.

次のようなシェルスクリプトを書きます. ファイル名は PDF-wo-Miru (PDF を見る) から pdfm.sh です.

pdfm.sh
#!/bin/sh

if [ $# -ne 1 ]; then
    echo "Usage: `basename $0` pdf-file"
    exit 1
fi

TEMPDIR=`mktemp -d`
TEMPBASE="$TEMPDIR/pdfm"
TEMPHTML=`tempfile -s.html`

pdftoppm -png $1 $TEMPBASE

cat << EOF > $TEMPHTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>$1</TITLE>
</HEAD>
<BODY>
<CENTER>
EOF

find $TEMPDIR/*.png | sort | while read line
do
    echo "<DIV><IMG SRC=\"$line\" WIDTH=\"80%\"></DIV>" >> $TEMPHTML
done

cat << EOF >> $TEMPHTML
</CENTER>
</BODY>
</HTML>
EOF

w3m $TEMPHTML

rm -rf $TEMPHTML $TEMPDIR

完成したら make pdfm と実行して,生成された pdfm$HOME/bin/ あたりにぶち込んで置きましょう.


おわりに

おわりです.

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

【CentOS 8】サポート短縮!RHEL互換のRocky Linuxが新リリースされるらしい

解説

CentOS Linux 8のサポートが従来の2029年5月31日から2021年12月31日に短縮され、Cent OS創設者のGregory Kurtzer(グレゴリー・クルツァー)により新RHEL(Red Hat Enterprise Linux)互換ディストリビューション” Rocky Linux ”が2021年中にはリリースされるらしいです。それから” Rocky Linux Project ”は新コミュニティが主導で開発が行われて居るようです。かなり大幅にサポート期間が短縮されたので、Cent OSを導入している企業等は新RHEL互換のLinuxディストリビューションに乗り換えて行くのではないでしょうか。

概要(Rocky Linux)

RHEL(Red Hat Enterprise Linux)プラットフォーム
商用環境、本番環境共に対応しているディストリビューションである。
Amazon Web Services(AWS)にも対応予定であるらしい。
GCP (Google Cloud Platform)Azure(Microsoft Azure)等は不明。

開発:新コミュニティ
パッケージマネージャー:RPM DNF
デフォルトユーザーインターフェース:GNOME *
ライセンス:TBA *
プラットフォーム:x86-64
対応言語:多言語

1200px-Rocky_Linux_wordmark.svg.png

参考:
https://rockylinux.org/ja/ (コミュニティに参加できます)
https://ja.m.wikipedia.org/wiki/Red_Hat_Enterprise_Linux
https://www.google.com/amp/s/www.debugpoint.com/2020/12/rocky-linux/amp/

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

自動的に作成される仮想NICのMACアドレスをイベントドリブンに変更する方法

概要

Linuxでは簡単にNICのMACアドレスを変更できる。
仮にベアメタルマシンに対して直接Linuxをインストールしているような状況であっても同様。
物理的なMACアドレスは変わらなくても、OSとして認識する論理部分としてMACアドレスを上書きできる。

一方で、現代のOpenStackやK8sなどでは、仮想的なNICが自動的に作成されるシーンが非常に多い。
こういったシーンで、仮想的なNICのMACアドレスをどーーしても変更したいときの方法について書きたい。

もちろん仮想NICが作成後に、手動でそれを変更することは簡単に可能。
だが作成後に瞬時に通信開始するようなシーンの場合、それでは間に合わないこともある。何より面倒くさい。
なので自動的にやりたい。そういったときの方法を簡単ではあるが記事として残しておく。

正直、そんな状況なんてなかなかないとは思うが・・・一応誰かの役に立てれば幸い。
※私の場合、OpenStack on OpenStackな環境を作っていて、こういう状況に見舞われた

そしてもっと良い方法があれば是非教えてください!

方法

udevさんを使って自動的に変更してもらう。マジでudevさん便利すぎ。

以下のようなルールファイルを作成し、/etc/udev/rules.d/配下に置いておく。配置しておくだけで自動的に機能してくれる。

  • KERNELによる条件式で対象NICを判定する。
    • ここでは*なども使える。
    • しかし特定NICに特定MACアドレスを付与したいはずなので、多くはNIC名を直書きだと思う。
  • RUNで任意のコマンドを実行可能。ここでipコマンドを叩いてMACアドレスを変更させる。
  • $nameにはNIC名が代入されている。RUNと組み合わせて使用することで特定のNICを狙い撃ちすることが出来る。
  • [macaddress]には変更したいMACアドレスを指定する。
ACTION=="add", SUBSYSTEM=="net", KERNEL=="[nic_name]", RUN+="ip link set dev $name address [macaddress]"

上記は単一ルールファイルに複数行書いておくことも可能。MACアドレス変更系は1つのファイルにまとめて書いておいたほうが便利だと思う。

/etc/udev/rules.d/75-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="vlan1000", RUN+="ip link set dev $name address 0a:1b:2c:3d:4e:5f"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="vlan2000", RUN+="ip link set dev $name address 00:11:22:33:44:55"
ACTION=="add", SUBSYSTEM=="net", KERNEL=="vlan3000", RUN+="ip link set dev $name address aa:bb:cc:dd:ee:ff"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む