20200601のLinuxに関する記事は9件です。

外部からLinuxを操作する方法 手順

【学習環境】

Redhot系:CentOS
SSH接続用ソフト:TeraTerm
仮想マシン:VirtualBox

【概要】

SSHで仮想ローカルLinuxにアクセスする方法

TeraTermを使ってLinuxにアクセスする場合、
外部からアクセスする許可をしなければいけない。

「CentOS のネットワーク設定をする」

【手順】

1.ユーザー権限をrootにする
2.ネットワーク設定用のファイルを編集する
3.ネットワーク設定を行う
4.TeraTeamで接続

【詳細】

1.ユーザー権限をrootにする

$su - を実行する(su と - の間はスペース)

root権限コマンド
$su -

passwordを聞かれる。
password はホストユーザー(ログイン画面)にログインするためのパスワードを入力する
ここでうまく root ユーザーになると
コマンド命令を待つ記号($)が # に変わる。
スクリーンショット (418).png

2.ネットワーク設定用のファイルを編集する

以下のコマンドを入力してEnterではなくTab押す。

# vi /etc/sysconfig/network-scriprs/

すると2パターンの画面表示が出るのでそれぞれに対応した
パターンで進んでください。
(Tabキーは次の入力候補を示してくれるコマンド)
※詳細はWebで検索

ーーーーーーーーーーーーーーーーーーーーーーーーーー
【パターン1】
スクリーンショット (423).png

上記のパターンの場合、ifcfg-○○ と ifcfg-lo を探して
ifcfg-○○ の方を # vi /etc/sysconfig/network-scriprs/の後に記述

# vi /etc/sysconfig/network-scriprs/ifcfg-○○

上記のように記入したらEnterを押して【編集手順】に移ってください。
ーーーーーーーーーーーーーーーーーーーーーーーーーー

【パターン2】
スクリーンショット (424).png

上記のように記入したらEnterを押して【編集手順】に移ってください。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
【編集手順】
今回編集するファイルは ifcfg-○○ のファイルです。
ちなみに○○は外部と接続するためのネットワークインターフェースの設定ファイル名です。人によって変わるので気にしなくて大丈夫です。
スクリーンショット (426).png

以上の画面が出てきたら、以下の手順を踏んでください。
1.  iキーを押して入力モードにする
2. 一番下のONBOOT= no を yes に変更する
3. Ctrl + C (もしくは Esc)で入力モード解除
4. :wq コマンドで編集を保存して終了

3.ネットワーク設定をする

画面の右上にある「仮想マシン」>「ファイル」を選択

「ネットワーク」>「高度」>「ポートフォーディング」

設定を追加していく。
ホストポート:3333
ゲストポート:22(SSHで接続するポート番号)
※覚えやすい番号なら何でも構いません。

設定が終わったら再起動する

# reboot

4.TeraTeamで接続

TeraTeamを起動

スクリーンショット (427).png

Host:127.0.0.1:3333
TCP post# : 22

ネットワーク設定で追加した数字を設定

スクリーンショット (428).png

Continue を選択

スクリーンショット (429).png

「User name」 と 「Passphrase」を追加したら
OKを選択
(※「User name」と「Passphrase」作成したホストのユーザー名とパスワード)

以上になります。

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

ssh した先のサーバーでタスクをバックグラウンド実行する

概要

今更感はとてもありますが、リモートで作業することが増え、機械学習などの操作をリモートサーバで行うことが増えました。
理由は自分の持っているノートpcだととてもじゃないけどスペックが足りないからです。
google colab を使うのももちろんいいのですが、長い時間操作しないとタイムアウトになったり、使えるGPUの性能も限られていたりしますしね。

いつもsshした先のサーバでコマンドを打っていたのですが、浅はかながらsshした先のプロセスを生かすために、接続を保持していました。。
でもよく考えたらそんなことする必要は全くありませんでした。

やり方

まずssh 接続を簡単にする

https://qiita.com/kenmaro/items/a548a302228029c5c870
ここで詳しく解説したのですが、sshの認証を行う設定をし、~/.ssh/config を編集しておくことで、
例えば my_remote_pc へのssh接続が、

ssh my_remote_pc

みたいにすごく手軽にssh接続できるようになります。

プロセスのバックグラウンド実行

また、ローカルでコマンドをバックグラウンドすることはやったことのある人も多いかもしれません。
例えば、python main.py をバックグラウンド実行したい時は、コマンドの最後に& をただつけるだけです。

python main.py &

上2つを同時にやる

上2つを混ぜると、sshした先のサーバーでバックグラウンド実行できます。これで、ssh接続を切ったとしても、プロセスはリモートサーバ上で回ってくれます。

やりかたは簡単で、ssh <***> "<***> &" です。さっきの例で行くと、

ssh my_remote_pc "python main.py &"

これだけです。

これで、わざわざssh接続を確認しながら、プロセスが回っているかどうかチェックする必要なくなりましたね。

こんなの当たり前と思う人が大半だと思いますが、自分のようになぜか不自由なやりかたで無駄なことをしていた人ももしかしたらいるはずなので、参考になれば幸いです。

この辺で。

おわり。

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

ピラミッドを表示するシェルプログラム

はじめに

Bashプログラミングの小ネタとして作成しました。
「*」を使ってピラミッドを表示してみます。

左寄り5段のピラミッド

ソース

#!/bin/bash

echo "*"
echo "**"
echo "***"
echo "****"
echo "*****"

実行結果

$ ./pyramid.sh
*
**
***
****
*****

指定した数の段数を表示するピラミッド

先程のプログラムは、あれでも立派なプログラムです。
しかし、柔軟性に欠けるため、ユーザに段数を指定させるように修正します。

ソース

#!/bin/bash

ast='*'

echo -n "Input number => "
read num

for i in $(seq 1 $num)
do
  echo "$ast"
  ast='*'${ast}
done

forでなく、whileでカウンターを使っても良いですね。
whileよりもforの方が可読性が高いので採用しました。

実行結果

$ ./pyramid.sh
Input number => 6
*
**
***
****
*****
******

指定した数の段数を表示するピラミッド(中央揃え版)

結構難しかったです。
「*」の左側に空白が必要なのでそれをどのように扱うか。
また、空白を1つずつ減らす処理が必要になります。

ソース

$ cat center_pyramid.sh
#!/bin/bash

ast='*'
spc=' '

echo -n "Input number => "
read num

(( spc_cnt = $num - 2 ))

for i in $(seq 1 $spc_cnt)
do
  spc=' '${spc}
done

for j in $(seq 1 $num)
do
  echo "$spc""$ast"
  ast='**'${ast}
  spc=${spc#' '}
done

空白を削除する方法に、変数の文字列置換を使用しました。

実行結果

$ ./center_pyramid.sh
Input number => 6
     *
    ***
   *****
  *******
 *********
***********

おわりに

このプログラムを作成することで

  • 分岐構文
  • 繰り返し構文
  • readコマンド
  • testコマンド
  • 特別な意味を持つ記号の扱い
  • 変数の文字列置換
  • Bashのお作法

が理解出来ました。

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

Linuxカーネルのコンパイル (Ubuntu 20.04 で Linux 5.x)

Ubuntu 20.04 LTS (Server) には初期設定で Linuxカーネル 5.4.0 が入っている。
これ(Ubuntu 20.04)に自分でコンパイルしたカーネルを入れてみる。
カーネルは kernel.orgが配布しているバニラカーネルを使用する。

カーネルコンパイルの前に必要なツールをインストール

sudo apt -y install make gcc flex bison libssl-dev

もともと入っている Linux 5.4.0 をインストールしてみる

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.xz
tar xfJ linux-5.4.tar.xz
cd linux-5.4/
cp /boot/config-5.4.0-33-generic ./.config
yes "" | make oldconfig
make -j8 bzImage modules
sudo make modules_install install

現時点で最新の Linux 5.6.15 をインストールしてみる

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.15.tar.xz
tar xfJ linux-5.6.15.tar.xz
cd linux-5.6.15/
cp /boot/config-5.4.0-33-generic ./.config
yes "" | make oldconfig
make -j8 bzImage modules
sudo make modules_install install

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

Linux(RasPi,Edison)で起動スクリプトを設定する

Edison起動時にNode.jsを自動起動させたかった

起動スクリプトの設定

起動スクリプトのユニット作成

まずは設定ファイルを作る

$ vi /etc/systemd/system/hoge.service 

スクリプトの設定例 (Node.jsの場合)

設定ファイルの中身

[Unit]
Description=Node.js Hoge-Server

[Service]
WorkingDirectory=/home/root/Documents/Project/hoge
Type=simple
ExecStart=/usr/bin/node app.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node-server

[Install]
WantedBy=multi-user.target

スクリプトを開始する

$ systemctl start hoge.service

スクリプトを停止する

$ systemctl stop hoge.service

ログを見る

$ systemctl status hoge.service

起動スクリプトのイネーブル

OS起動時に自動起動させる

$ systemctl enable hoge.service

起動スクリプトのディセーブル

OS起動時に自動起動させない

$ systemctl disable hoge.service

参考サイト

http://enakai00.hatenablog.com/entry/20130917/1379374797

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

3の倍数でahoになるシェルプログラム

はじめに

Bashプログラミングの小ネタとして作成しました。
昔流行った?3の倍数や3が含まれる数でahoになります。

ソース

#!/bin/bash

echo -n "Please input end number => "
read num

count=1

while (( $count <= $num ))
do
  if (( $count % 3 == 0 ))
    then
      echo "aho"
    else if  [ "`echo $count | grep 3`" ]
      then
        echo "aho"
      else
        echo $count
    fi
  fi
  (( count+=1 ))
  sleep 1
done

実行結果

$ ./aho.sh

Please input end number => 15
1
2
aho
4
5
aho
7
8
aho
10
11
aho
aho
14
aho

おわりに

このプログラムを作成することで

  • 分岐構文
  • 繰り返し構文
  • testコマンド([]や``)
  • Bashのお作法

が理解出来ました。

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

Pythonのバージョンを2→3に上げたけど、ubuntuターミナルを再起動する度に、バージョンが2のままになる

現状

pyenv を使って、pythonを2から3にアップデートした。

その後、下記のコマンドでPath設定をした。

$ export PATH="/home/{{user名}}/.pyenv/bin:$PATH"
$ eval "$(pyenv init -)"
$ eval "$(pyenv virtualenv-init -)"
$ python --version
Python 3.7.6

しかし、今開いているターミナルを消して再起動させたら、

$ python --version
Python 2.7.6

と、pythonのバージョンが2に戻ってしまった。

解決策

/.bashrcを編集して、再起動時にコマンドを自動的に実行するようにする

$ vi ~/.bashrc

で bashrc ファイルを開いて編集する。

任意の場所に、

export PATH="/home/{{user名}}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

を追加すればok

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

Remote Processor Framework (1/3)

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/remoteproc.txt

Remote Processor Framework

Introduction

Modern SoCs typically have heterogeneous remote processor devices in asymmetric multiprocessing (AMP) configurations, which may be running different instances of operating system, whether it's Linux or any other flavor of real-time OS.

近年の一般的なSoCは、非対称マルチプロセッサ構成(asymmetric multi processing, AMP)として、heterogeneous remote processor device を有している。これは、Linux あるいはほかのreal-time OSといった異なるoperating systemのインスタンスを動かすことができる。

OMAP4, for example, has dual Cortex-A9, dual Cortex-M3 and a C64x+ DSP. In a typical configuration, the dual cortex-A9 is running Linux in a SMP configuration, and each of the other three cores (two M3 cores and a DSP) is running its own instance of RTOS in an AMP configuration.

例えば、OMAP4には、dual Cortex-A9, dia; Cortex-M3としてC64x+ DSPを有している。一般的な構成では、dual cortex-A9 はSMP構成でLinuxを動かし、残りの3つのコア(two M3 cores と DSP)では、AMP構成でそれぞれのRTOSのインスタンスを動かす。

The remoteproc framework allows different platforms/architectures to control (power on, load firmware, power off) those remote processors while abstracting the hardware differences, so the entire driver doesn't need to be duplicated. In addition, this framework also adds rpmsg virtio devices for remote processors that supports this kind of communication. This way, platform-specific remoteproc drivers only need to provide a few low-level handlers, and then all rpmsg drivers will then just work (for more information about the virtio-based rpmsg bus and its drivers, please read Documentation/rpmsg.txt).

remoteproc frameworkは、ハードウェアの違いを抽象化して、remote processorに対して異なるプラットフォーム/アーキテクチャに対して制御(電源投入、ファームウェア読み込み、電源切断)を、実現するものである。ドライバー全体を複製する必要はありません。更に、このframeworkではまた、この種類の通信をサポートする、remote processorとのrpmsg virtio device を追加します。このように、プラットフォーク特有のremoteproc driverは、わずかなlow-level handlerの提供のみをすればよく、そのあと、全てのrpmsg driverが正しく機能するでしょう(virtio-based rpmsg busとそのドライバに関する更なる情報については、Document/rpmsg.txtを参照してください)

Registration of other types of virtio devices is now also possible. Firmwares just need to publish what kind of virtio devices do they support, and then remoteproc will add those devices. This makes it possible to reuse the existing virtio drivers with remote processor backends at a minimal development cost.

他の種類のvirtio deviceを登録することもまた可能です。Firmwareはそれらがサポートしているvirtio devicesの種類を公開するだけで、remoteprocはそれらのdeviceを追加します。これにより最小の開発コストによって、remote processor backendで既存のvirtio driverを再利用することができます。

User API

int rproc_boot(struct rproc *rproc)

Boot a remote processor (i.e. load its firmware, power it on, ...).

remote processorの起動(例えば、firmwareのload, 電源投入)

If the remote processor is already powered on, this function immediately returns (successfully).

remote processorが既に電源投入されている場合、この関数は即座にreturnする(成功として)。

Returns 0 on success, and an appropriate error value otherwise.

成功した場合、戻り値は0であり、そうでない場合には適切なエラー値が入る。

Note: to use this function you should already have a valid rproc handle. There are several ways to achieve that cleanly (devres, pdata, the way remoteproc_rpmsg.c does this, or, if this becomes prevalent, we might also consider using dev_archdata for this).

注意:この関数を使う場合、有効なrpoc handleを事前に用意する必要がある。それを綺麗に達成するには、いくつかの方法があります。(devres, pdata, このremoteproc_rpmsg.cを使う方法、流行った場合に、dev_archdataの使用を検討する事もできます)

void rproc_shutdown(struct rproc *rproc)

Power off a remote processor (previously booted with rproc_boot()). In case @rproc is still being used by an additional user(s), then this function will just decrement the power refcount and exit, without really powering off the device.

remote processorの電源切断(事前にrpoc_boot()で起動しておいたもの) prpocは既にほかのユーザーによって使われていた場合、この関数はpower refcountを減らして終了し、実際のデバイスの電源切断は行わない。

Every call to rproc_boot() must (eventually) be accompanied by a call to rproc_shutdown(). Calling rproc_shutdown() redundantly is a bug.

全てのrpoc_boot()の呼び出しには、(最終的には)rpoc_shutdown()への呼び出しを伴う必要があります。rpoc_shutdown()の不要な呼び出しはバグです。

note

we're not decrementing the rproc's refcount, only the power refcount. which means that the @rproc handle stays valid even after rproc_shutdown() returns, and users can still use it with a subsequent rproc_boot(), if needed.

rprocのrefcountを減らすのではなく、power refcountのみを減らします。つまり、rpoc handleは、rpoc_shutdown()から戻った時点でも有効であり、ユーザーは必要に応じて後続のrppc_boot()で利用する事ができます。

struct rproc *rproc_get_by_phandle(phandle phandle)

Find an rproc handle using a device tree phandle. Returns the rproc handle on success, and NULL on failure. This function increments the remote processor's refcount, so always use rproc_put() to decrement it back once rproc isn't needed anymore.

device tree phandleを使ってrpoc handleを探索します。成功した場合にはrpoc handleが、失敗したときにはNULLが帰ります。この関数はremote processorのrefcountを増化させます。rpocが不要となった場合には、rpoc_put()を使って減少させてください。

Typical usage

  #include <linux/remoteproc.h>

  /* in case we were given a valid 'rproc' handle */
  /* 有効な`rpoc` handleが得られているケースにおいて */
  int dummy_rproc_example(struct rproc *my_rproc)
  {
    int ret;

    /* let's power on and boot our remote processor */
    /* remote processorの電源投入と起動 */
    ret = rproc_boot(my_rproc);
    if (ret) {
        /*
         * something went wrong. handle it and leave.
         */
        /*
         * 何か問題が起きたので、それをハンドリングして離れてください
         */
    }

    /*
     * our remote processor is now powered on... give it some work
     */

    /*
     * remote processorは今、電源投入された、仕事を与えてください。
     */

    /* let's shut it down now */
    /* 電源切断 */
    rproc_shutdown(my_rproc);
  }

もともと、Linux Kernelのソースコードの一部なので、GPLv2扱いになる(はずの認識)。

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

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

Ubuntu 18.04 LTS をインストールした後やること10選

Ubuntu 18.04 LTS インストール後のおすすめの基本設定をまとめてみました。

フォルダ名を英語に変更する

Ubuntu に限らず Linux を日本語でインストールすると、ホーム内のフォルダ名が日本語になっていて少々不便です。

Ctrl + Alt + T を押して端末を起動し、

LANG=C xdg-user-dirs-gtk-update

このコマンドを実行するとウィンドウが表示されるので Update Names ボタンをクリックした後、一度ログアウト、ログインし直すとまたウィンドウが表示されるので、今度は 次回から表示しない にチェックを入れて 古い名前のままにする ボタンをクリックすると、フォルダが英語になります。

ディスプレイの電源が自動でオフになるまでの時間を延長する

デフォルトでは5分 Ubuntu を放っておくと自動的にディスプレイの電源が切られますが、5分はちょっと短いですね。

アクティビティ画面で power と入力すると 電源管理 という項目が表示されるので、
001.png
それをクリックすると設定ウィンドウが表示されます。その設定ウィンドウにある ブランクスクリーン15分しない にします。
002.png

日本語を入力できるようにする

Ubuntu をインストールした直後は半角/全角キーを押しても日本語を入力できません。トップバーにある ja ▼ をクリック、日本語 (Mozc) あ をクリックして選択すると、半角/全角キーで日本語入力を切り替えられるようになります。
003.png

右クリックメニューから空のファイルを作成できるようにする

ホームフォルダ内のテンプレートフォルダにファイルを置くと、そのファイルをファイルマネージャの右クリックメニューから作成できるようになります。

touch ~/Templates/空のドキュメント

日本語の表示に関する2つの問題を回避する

Ubuntu 18.04 には以下のバグがあります。

・その1、文字の下の部分が隠れて表示されない場合がある
004.png
・その2、トップバーの時計の : の幅が太い
005.png
これらは NT UI JP フォントをインストールすることで正常に表示されるようになります。

wget https://sicklylife.jp/ubuntu/2004/fonts-nt-ui-jp_2_all.deb
sudo apt install ./fonts-nt-ui-jp_2_all.deb
rm fonts-nt-ui-jp_2_all.deb

004_2.png
005_2.png
ウィンドウスイッチャーが上下に広がるバグに対応するより。
元に戻すコマンドはこちら。

sudo apt remove -y fonts-nt-ui-jp
sudo apt autoremove

トップバーに日付を表示する

初期設定ではトップバーに曜日しか表示されていません。

sudo apt install gnome-tweaks

Tweaks という設定ツールをインストールしてアクティビティ画面から起動し、
008.png
トップバーの項目で日付をオンにすると、トップバーに現在の日付が表示されます。
009.png

Ubuntu Japanese Team のリポジトリを追加する

Ubuntu には、Windows 10 で作成した zip ファイルを解凍 (展開) すると日本語が文字化けする問題があるのですが、Ubuntu Japanese Team 製の ubuntu-defaults-ja というパッケージをインストールしておくと文字化けしなくなります。

wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt update
sudo apt dist-upgrade
sudo apt install ubuntu-defaults-ja

ubuntu-defaults-ja をインストールした後、Ubuntu を再起動すると設定が反映されます。

動画や音楽を再生できるようにする

Ubuntu インストール時に「グラフィクスとWi-Fiハードウェアと〜」にチェックを入れた場合は、既にコーデックがインストール済みですが、追加でさらに動画や音楽再生用のコーデックなどをインストールできます。

sudo apt install ubuntu-restricted-extras

インストール中に端末の画面が ttf-mscorefonts-installer を設定しています という画面に切り替わるので、
006.png
Tab キーを押して 了解 を選択、Enter キーを押すとまた選択肢が出てくるので、もう一度 Tab キーを押して はい を選択、Enter キーを押すとインストールが続行します。
007.png

GNOME Shell 拡張機能をインストールできるようにする

Ubuntu は Google Chrome や Firefox のように、有志が作成した拡張機能をインストールすることができます。が、事前の設定が必要です。

sudo apt install chrome-gnome-shell

このコマンドを実行して chrome-gnome-shell をインストールした後、Firefox 用拡張機能の GNOME Shell integration をインストールします。この状態で https://extensions.gnome.org/ にアクセスすると GNOME Shell 拡張機能をインストールすることができます。

ちなみに GNOME Shell integration は Google Chrome 用 もあります。2019/10/16の時点で Google Chrome 用のユーザー数が366,897、Firefox 用の方は124,830となっています。

Mozc(日本語入力ソフト)の辞書を拡充する

Ubuntu の日本語入力ソフトは登録されている単語数があまり多くないようですが、Mozc UT2 を導入すると単語数を大幅に増やすことができます。

Ubuntu 用: https://sicklylife.jp/ubuntu/1804/mozc_ut2.html
UT2 辞書配布元: http://linuxplayers.g1.xrea.com/mozc-ut2.html

元々は Arch Linux 用みたいです。

設定が終わったら

アクティビティ画面で update と入力して ソフトウェアの更新 を起動し、インストールされているソフトウェアの更新があるか確認しておきましょう!

参考リンク

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