20210105のLinuxに関する記事は4件です。

CentOS上でマウス操作を切り替える方法

CentOS上でマウスポインターを自分のパソコンと仮想環境画面のポインターで切り替える方法

スクリーンショット 2021-01-05 22.30.07.png

左側の⌘キーを押せば押すたびにメインPC⇄centOSの画面で切り替わる

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

docker / docker-compose バージョン指定 インストール (アップ|ダウン)

インストール 覚え書き

function version () {
  [ -e $1 ] && $1 -v | sed -r 's/.* ([\.0-9]+), .*$/\1/'
}

VER=19.03.8
BIN=/usr/bin/docker
if [ $(version $BIN) != $VER ]; then
  curl -s -fsSL https://get.docker.com \
    | sed 's/sleep [0-9]*//' \
    | sed 's/apt-get install/apt-get install --allow-downgrades/' \
    | VERSION=${VER} sh
fi

VER=1.24.1
BIN=/usr/bin/docker-compose
if [ $(version $BIN) != $VER ]; then
  URL=https://github.com/docker/compose/releases/download/${VER}/docker-compose-$(uname -s)-$(uname -m)
  curl -s -L $URL -o ${BIN}
  chmod +x ${BIN}
fi

リリースノート

https://docs.docker.com/engine/release-notes/
https://docs.docker.com/compose/release-notes/

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

2021年初にROS(Melodic)を初代ラズパイ(Stretch)でも動かしてみた

はじめに

ARM11ベースのRaspberry Piは、Zeroシリーズとして今も健在で、かつ、ROSのインストールの成功事例が既にいくつも報告されています。1 

Zeroシリーズで動くならRaspberry Pi Model B (初代ラズパイ)モデルでも動かせるのではないかと思いネット上の記事を探したのですが、こちらはあまり報告例が見当たりません。単に、機材が古すぎるからでしょうが・・・

そこで、Zeroの事例を参考に自分でも実際にやってみたところ、少し設定を変更すれば初代ラズパイでもROSのコアをインストール/動作をさせることができました。2021年になってすでに過去の産物扱いの初代ラズパイですが、家に転がして飾っておくだけなのはもったいないという方のために、作業の備忘録を兼ねて、自分で実際に行ったインストール手順を簡単にご紹介します。

(追記 2021/1/5)誤字脱字、launch.pyのファイルフォルダ表記漏れ等を修正しました。

ROS入りRaspberry Pi Zero用OSイメージのダウンロード

手っ取り早くStretch + Melodicを試したい方には、すでにRaspberry Pi Zero用にRaspbian StretchにROS MelodicをインストールしたOSのイメージファイルを配布している方がいらっしゃいますので、まずは以下の記事をご確認ください。
Installing ROS Melodic on Raspbian Stretch

初代ラズパイ向けの修正

上記サイトからダウンロードしたZIPイメージを4GB以上のSDカードに焼いて初代ラズパイを起動すれば、すんなりとRaspbianが立ち上がります。単純なROSノードを起動させるだけであればこれでも使用できます。ただし、ROSCOREは、Zeroなら起動したのですが、初代ラズパイでは起動する途中でプロセスがダウンしてしまいました。

実際に発生した現象は、こちらの報告事例と同じです。パイソンがROSCOREの立ち上がりを待ちきれずにタイムアウトしてしまうために発生しました。

解決方法は、こちらの記事こちらの記事を参考にしました。具体的な作業を次に示します。

$ sudo nano /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/launch.py

#_TIMEOUT_MASTER_START = 10.0 #seconds   ###コメントアウト
_TIMEOUT_MASTER_START = 100.0 #seconds   ###追加

あと、こちらの記事を参考にして、スワップファイルのサイズも元に戻しておきました。

$ sudo nano /etc/dphys–swapfile

CONF_SWAPSIZE=100       ###追加
# CONF_SWAPSIZE=1024    ###コメントアウト

ファイルを保存して、スワップサイズの変更を有効にします。

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
$ free -m

以上で、初代ラズパイでROS(Melodic)のコア部分(ROS Core)がインストールした環境が入手できます。

さらに、衝動が抑えきれない方のために・・・

ROSを使用するのに、上記のような方法で環境を入手するのは、ubuntuapt-getROSをインストールするのと実質的な違いはないとも思いますが、どうせなら、自分でも一通りの手順を踏んでみたいという好奇心旺盛な方のために、冒頭でご紹介したサイトで紹介されているインストール手順を進める上で変更が必要だった手順やコマンドをいくつかご紹介します。

これは、思いのほか重要な情報で、特に強調したい点です。ROS.orgのステップ・バイ・ステップの手順通りにやっても記事が古いためか必ず失敗します。途中で作業が失敗した場合の原因を考えるうえでも有益な情報で、インストールの最後までたどり着くための羅針盤のようなものでした。ソフトウェアごとのバージョンの組み合わせについての知識なしに作業をするのは無謀であると同時に時間の無駄だと痛感しました。

  • 作業は、全体でほぼ半日以上かかります。特にrosdepの初期化(Initializing rosdep)作業だけで数時間かかりました。時間には、十分に余裕があるときに行いましょう。(追加の注意点は後述します。)
  • スワップメモリの拡張(100→1024)は、OSを最初に起動した際にやっておいても作業中のトラブルはありませんでした。インストール作業完了後には、元に戻しておきました。
  • 初回起動時のraspi-configでは、SSHだけを使えるようにしました。Windows PCからSSHで接続すれば、画面のコピペで作業できますので作業効率が上がります。
  • オーバークロックは今回は使用しませんでした。その他OSの初期設定は、できるだけ変更せず、ロケールや言語、キーボード配列も変えないようにしました。

  • SDカードは、8GBMicro SDを利用しました。2

rosdepの初期化作業前の追加作業

一番時間のかかる作業で途中でエラーが起きるとやり直すのが大変です。以下の作業を事前に加えて、コマンドも以下のように少し変更してみてください。

$ sudo apt-key del F42ED6FEAB17C654
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ rosdep install --from-paths src --ignore-src --rosdistro melodic -y --skip-keys-"python-pycryptodome" --os=debian:stretch

最初の二つのコマンドは、認証キーのエラー対策です。以下の記事を参考にさせていただきました。
ROS melodicインストール時のキーエラー (NO_PUBKEY F42ED6FBAB17C654)

python-pycryptodomeは、Melodicで使用されていますがStretchのdebには標準搭載されていないようです。pipでインストールする方法もあるようですが、私は、以下のROS Answerの記事を参考にして、プロセスをスキップさせました。
Pycryptodome

おわりに

実は、このテーマは、2020年にさんざん時間をかけて調べたり試したりしたものの、うまくいかなかった「道楽」の一つです。やっぱり、他人の書いた手順や実験結果だけをうのみにして、よく内容を理解せずに作業をしていたのが失敗の原因でした。ですので、REP 3のような「仕様」にかかわる情報の存在を知らずにいたのに、たまたまネット検索で偶然見つけられたのは幸運であるとともに、昨年までのやり方を大いに反省しました。


  1. ROS(melodic)をRaspberry Pi + Raspbian(stretch)にインストールする方法 

  2. ひと昔では信じられないほど新品が安く(税込みで350円くらい)入手できました。個人的な意見ですが、OSの実験ではSDカードのドライブの削除やパティションの再構築をしてフル・フォーマットをやり直したりするので、時間の節約のためにも、メモリカードはできるだけ小さいものを使用しています。 

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

Linuxチートシート 及び httpsサーバーとしてUbuntuをセットアップする

はじめに

自分用にLinux(Ubuntu)でサーバーを立てる際に必要な情報のメモを取りました。
つまりただUbuntuでサーバーを立てるだけです。
自分用なのでちょっと変な構成ですが、前半はLinux自体のチートシート、後半はWebサーバー/Apache関連です。

Linuxについて

Linuxの操作はシェルで行う。
シェル≠OS、シェル≠カーネル。シェルとはUIで、心臓部のカーネルと完全に分離している。

多重起動

sh(シェル起動)→bash(シェル起動)→exit(シェル終了)→exit(同左)→exit(最初のbash終了によりLinux終了)

echo Hello

→Hello

Linuxの構造

Linux上の情報は全てファイルとして扱われる。ドライバ類もファイルとして扱われる。

/bin コマンドの実行ファイル
/dev デバイスファイル(windowsで言うドライバ類)
/etc 各種設定ファイル(winで言うwindowsフォルダ)
/home ユーザーごとのホームディレクトリ
/sbin 管理者向けコマンドの実行ファイル
/tmp 一時ファイル用ディレクトリ 定期的に削除するディストリビューションもあるので、大事なファイルは置かない
/usr アプリケーションが置かれる このサブディレクトリとして再帰的にbinやsbinなどがあったりする
/var いろんなデータのディレクトリ

ディレクトリの移動はpwd(現在地表示)/cd(移動)/ls(ファイル一覧)で行う。
cdはTabで補完可能。また、引数なしならホームディレクトリに戻る。
lsはパス名展開(*/?)と組み合わせると便利。引数-l:属性表示、引数-a:隠しファイル表示、引数-F:ファイル種類表示

mkdir ディレクトリ作成
touch ファイル作成 タイムスタンプを作るコマンドなので、既存のファイルを上書きしないから安心して使える
rm/rmdir ファイル/ディレクトリ消去
cp/mv ファイルをコピー/移動 -rで再帰的にディレクトリごと操作
find ファイルを検索できる
locate インデックスから探す為高速に検索可能 ubuntuではsudo apt-get install mlocateで作る

bashの操作

Ctl+kは行末までをカット、Ctl+uは行頭までをカット
Ctl+yは「ヤンク」(ペースト)

Ctl+sで画面をロックしてしまった場合はCtl+qで戻す
Ctl+cでコマンドの強制終了
表示がおかしい場合はCtl+lで画面リセット→resetコマンド→再ログイン

Tabは入力補完の呼び出し、複数候補がある場合はたくさん出てくる

矢印かCtl+p or Ctl+nで履歴を遡る事が可能、Ctl+rでコマンド履歴の検索も可能
コマンド検索時:Enterで実行、Escで結果を保持したままコマンドへ、Ctrl+gで結果の放棄

--help コマンドのヘルプを見れるオプション
man 引数のコマンドの使い方を調べるコマンド -kをつけると類似品検索が可能
LANG=C 各コマンドの前につける事で英語で実行可能、英語のヘルプを見ることができる

vim(テキストツール)

:q 終了
:w ファイルを保存 引数は新しいファイル名
:q! 保存せず終了
i 入力モード開始
Esc 入力モード終了

hjkl カーソル移動
x/J 文字を削除/改行を削除
w/b 単語単位で移動
0/$ 行頭/行末へ移動
gg/G/数字+G 最初の行に移動/最後の行に移動/任意の行に移動
y/d/p コピー/カット/ペースト
u/Ctr+r アンドゥ/リドゥ

/ 検索 nで次の検索結果、Nで前の検索結果に
%/<置換元>/置換後/g

vimtutor/:help チュートリアル、ヘルプ

Linuxの挙動

ファイル/ディレクトリの権限

ファイルにはオーナー/グループ/パーミッション(権限)が存在。読み込み、書き込み、実行の権限を操作できる。
ディレクトリにも同様の権限がある。ファイルの削除可不可はディレクトリのパーミッションで決まる事に注意。
変更はchmod u/g/o/a,+/-/=,r/w/x ファイル名 で可。

スーパーユーザ

スーパーユーザ≒rootユーザはあらゆるファイルの操作が可能。システムファイルも含む。
そのため基本は一般ユーザを操作し、必要なときだけsudoコマンド等でスーパーユーザを使うのが良い。
su/sudoコマンドの権限等を一般ユーザに設定するには/etc/sudoersを操作する。その際特別なコマンドが必要。

プロセス/ジョブ

メモリ上で実行状態のプログラムをプロセスと呼ぶ。
プロセスは一つ一つが独立したメモリ領域とIDを持ち、並列的に実行可能。

ps 動作中のプロセスを確認可能。オプションを付ければ裏で動いているプロセスも見られる。

コマンドの一行のことをジョブと呼ぶ。
パイプでコマンドを繋いだ際、コマンドライン全体でジョブ、一つ一つのコマンドがプロセスとなる。
コマンドのIDはシェルごとに一意。

Ctrl+Z jobの一時停止
jobs 実行中のjob一覧
fg %ジョブ番号 ジョブの復帰
bg %ジョブ番号 バックグラウンドでジョブを動かし続ける
Ctrl+C 動いているジョブを強制終了させる
kill %ジョブ番号 バックグラウンドのジョブを強制終了させる

killコマンドはプロセスも終了させる事ができ、場合によっては使う。※元々はプロセスに特定のシグナルを送るコマンド

入出力

コマンド実行時、標準入力/標準出力/標準エラー出力の三チャネルが開かれる。

標準入出力のリダイレクトは可能。
たとえば cat < ファイル とすると、ファイルが代わりに入力される。
ls >> a.txtとするとファイルが代わりに出力される。
ls 2>> a.txtとするとエラー時ファイルが変わりに出力される。
ls >> a.txt 2>>&1とすると普通の実行時もエラー時も同じファイルに出力される。

linuxには/dev/nullというスペシャルファイルが用意されており、入力先と指定しても空っぽで、出力先と指定しても何も残らない性質がある。コマンドテスト時に使う。

アーカイブと圧縮

Linuxではアーカイブと圧縮は別々の単語。
アーカイブは一つのファイルにまとめるだけ。圧縮は基本アーカイブ後に行い、更にファイルを縮める。

tar cf b.tar dirA dirAからb.tarという圧縮ファイルを作る
tar tf b.tar b.tarの中身を見る
tar xf b.tar b.tarの中身を復元。

gzip a.txt a.gzを作る
gunzip a.gz 解凍する
zip/unzip Linuxならsudo apt-get install zip unzip等でインストール可

パッケージとリボジトリ

パッケージとは一つのソフトをまとめたもの。
Redhat系ならrpm、Debian系ならdebファイルが使われる。
Debian系ではapt系コマンドを使いインストールする。依存性の解決は勝手にやってくれる。

パッケージを集めて配布しているサイトをリポジトリと呼ぶ。

SSH

SSHとはSecureShellの略。リモートマシンと通信するためのプロトコルで、認証・暗号化の機能を持つため安全に操作できる。
通常はTCP22ポートが利用される。

Linux,Ubuntuでサーバーを立てる

今回さくらVPSを使用する。
理由:知っていた、安い のみ しっかりした比較はしていない

公式書面通りデフォルト設定だとセキュリティについては不十分の様子、人に迷惑をかけるリスク等を考えまずセキュリティ対策が必要。その後Apacheを入れる。

Ubuntuインストール

標準インストールでUbuntu20を入れる。

セキュリティ

基本指針

以下はメンター紹介サービスでお金を払って聞いた情報で、この記事の指針とする。
信憑性不完全ゆえ指摘願います。

  • セキュリティの要はポート開閉 しっかり閉める 特にポートの種類で危険度の制御が可能で、HTTPポートへの複雑な攻撃は難しい
  • SSH鍵認証はパスワード認証とは比にならないほど安全。ちゃんと設定。業務でかつ規模の大きいサービスは、SSHに繋ぐ時も踏み台を経由する
  • rootはやはり誤操作や乗っ取りが危険、封印が基本
  • セキュリティパッチ/アップデートを定期的に当てる
  • 追加Linux用セキュリティソフトは業務用等で存在するだろうが、企業予算レベルで高いはずなのであまり考えない

アップデートする

定期的に実行の事。
sudo apt update OSのアップデート
sudo apt upgrade パッケージのアップデート
sudo reboot 2つこなしたらこのコマンドで再起動

一般ユーザーの用意

さくらVPS公式でデフォルトで用意されるユーザー ubuntuは一般ユーザーと思われる。

teraterm,ターミナルマルチプレクサー

SSHクライアント/コンソールエミュレータとしてはteraTermが良さそうなので導入。

また、ターミナルマルチプレクサーという複数のターミナルを管理できるソフトを準備。
本来の用途とは少しズレるのだが、コマンドを入れて一晩処理させる時等にセッションが維持される点で有用な為。
※情報元:http://www.tohoho-web.com/ex/tmux.html

ubuntu serverにはtmuxという有名ターミナルマルチプレクサーが既に入っている。
tmuxコマンドで起動。
再ログイン時はtmux attachで以前のセッションを復帰。SSH切断時等に生きるので、なるべくtmuxから動かすようにする。

SSHポート番号の変更

デフォポート22はやはり不正アクセスが多い模様。
※情報元:https://www.softel.co.jp/blogs/tech/archives/1516

vi /etc/ssh/sshd_configから、#Port 22という記述の一行下に「Port n」を追加。
sudo systemctl restart sshd によって再起動、
sudo systemctl status sshd によって確認。
teratermで新ポートからログイン可能か確かめてからパケットフィルタを解除。

ufwの設定

iptablesというセキュリティツールのインターフェイスソフト ufwで設定を行う。
※情報元:https://qiita.com/shimakaze_soft/items/c3cce2bfb7d584e1fbce

sudo ufw enable でufwを有効化。
sudo ufw status numbered で有効なことを確認。
sudo ufw allow sshPort でsshポートを開ける。

秘密鍵作成

teratermを起動し、開始時の接続ウィザードからキャンセルで抜ける。
setup→ssh keygeneratorウィザードを起動。RSA2048で大丈夫らしいので、そのまま生成。
パスフレーズを入れ、公開鍵と秘密鍵を保存して閉じる。

ubuntu本体のHomeディレクトリへ公開鍵を突っ込み
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub

sudo vim /etc/ssh/sshd_config
PubkeyAuthentication yesのコメントアウトを解除
PasswordAuthentication をnoにして
sudo systemctl restart ssh にてsshをリセット

WinSCP

teratermでもSCP(SSHを利用したファイル転送)が使えるが、色んな所で書かれてる通りteratermのSCPは最低限のシンプルなもの。
WinSCPを入れる。ドラッグドロップ等でやり取り可能。

初回起動ウィザードでユーザー名だけ入れて設定を作成、AdvancedのSSH→Authorizationで秘密鍵を登録。.ppkファイルが必要だそうなので道なりにそのまま作成。
後は道なりにhomeディレクトリにアクセスできる。

Apache

sudo apt install apache2 にてapacheをインストール。
この時点でufwを解除してからサーバーURLにブラウザでアクセスするとApacheデフォルトが表示される。

WinSCPでwww/htmlの中身を変更。
なお、転送の際は
sudo chown -r user apacheのWWWフォルダ 等として所有者を自分に変更する。

文字化けする場合はとりあえずHTMLヘッダーを確認する。
vim /etc/apache2/conf-available/charset.conf デフォルトの文字エンコードも確認する。
※情報元:https://obel.hatenablog.jp/entry/20171016/1508119266

他、いわゆるhttpd.confファイルは現在etc/apache2/の中に分散して存在しているので、まとめて同じ設定項目をgrepする。

sudo ufw allow 'Apache Full' でApache用のポートを開けて、こちらも確認。
(素人考えだとソフト任せが危険な気がして、sudo ufw allow 80/tcp,sudo ufw allow 443/tcpのほうがよいように思うが、複数ソースで上記の通りだった為恐らくこちらが正しい)

SSL

Let's encryptでSSLをつける。
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-ja
https://weblabo.oscasierra.net/letsencrypt-2/ (※CentOS)
公式見たりすると色々方法があるが一応この二つがよさそう。

sudo apt install certbot python3-certbot-apache を使いapacheにcertbotを突っ込む。
sudo vim /etc/apache2/sites-available/your_domain.conf からServerNameとServerAliasを確認。
sudo apache2ctl configtest で構文をテスト。(SyntaxOKを確認)
sudo certbot --apache を実行。
メールアドレス、メールマガジン配信の有無、どのドメインを有効化するか(空欄推奨)、HTTPSへリダイレクトするか(多分リダイレクトが良い)聞かれてHTTPS化は完了。

sudo systemctl status certbot.timer の表示がactiveで、かつ
sudo certbot renew --dry-run でエラーが出なければ自動更新も問題ないはず。

完成、サーバーURLもしくは登録済みのドメインにhttpsアクセスができるはずです。

おわりに

ご指摘頂けますと幸いです。
特に後半は正しさを担保できず、勉強の為にも特にご意見下さい。

現在twitterにてWebの勉強中です。これからもやっていきますのでよければ色々教えて頂けますと幸いです。
https://twitter.com/kisihara_c

主要参考文献

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