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

AWS EC2でAWS SDK for PHPインストール(PHP7.2+Apache2.4.41 + OPCashe + Composer)

Amazon Linux EC2でAPI叩いてからDynamoDBに保存するときに
PHPでやりたかったので、AWS SDK for PHPを入れようとしました。

しかし、色々課題が発生したので、備忘録にします。自分用ですが、
対象読者は、「色々やったけど調べる内に、ここに行き着いた人」です。
助力になれば、幸いです。

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

AmazonLinux2 ExtrasLibraryで PHP7.2をインストール

$ sudo amazon-linux-extras install php7.2
$ sudo yum install php php-mbstring

$ sudo yum list installed | grep php
php-cli.x86_64                        7.2.30-1.amzn2                 @amzn2extra-php7.2
php-common.x86_64                     7.2.30-1.amzn2                 @amzn2extra-php7.2
php-fpm.x86_64                        7.2.30-1.amzn2                 @amzn2extra-php7.2
php-json.x86_64                       7.2.30-1.amzn2                 @amzn2extra-php7.2
php-mysqlnd.x86_64                    7.2.30-1.amzn2                 @amzn2extra-php7.2
php-pdo.x86_64                        7.2.30-1.amzn2                 @amzn2extra-php7.2

参考:https://qiita.com/owlbeck/items/20f3e5402cb782f6291e

Apache をインストール

$ sudo yum install httpd
$ systemctl start httpd
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Active: active (running) 

OPCashe をインストール

sudo yum install php-opcache

Composer をインストール

$ curl -sS https://getcomposer.org/installer | php
$ ls
composer.phar

$ php composer.phar
$ mv composer.phar /usr/local/bin/composer
$ composer

最後の二行はPATHが通っている場所に引っ越しただけです。これでかっこいいロゴを表示できます。
参考:https://getcomposer.org/doc/00-intro.md
参考:https://qiita.com/kakijin/items/02364adacf36410f449e

AWS SDK for PHP の使用開始

$ sudo -i
$ cd /usr/local/bin/composer
$ vi composer.json //jsonに書き込み
composer.json
{
    "require": {
        "aws/aws-sdk-php": "2.*"
    }
}
$ php composer.phar install
phpに書き込んで終了
require '/path/to/sdk/vendor/autoload.php';

終了

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

【CentOS7.7】デスクトップ環境インストール~リモートデスクトップ接続可能迄(最小限インストールから)

はじめに

WindowsからCentOSのGUI環境に業務でRDP接続するように設定する機会がありました。
今回は、ナレッジとしてこちらを残したいと思います。

環境

端末 : Windows 10 Pro
OS: CentOS7.7

[root@tspshell01 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@tspshell01 ~]#

「最小限のインストール」にてOSインストール

前提条件

  • 下記設定が完了していること
    ・ホスト名/IPアドレス設定
    ・DNS設定

  • 「/etc/yum.repos.d」直下が初期状態であること
    ※下記が初期状態

[root@tspshell01 ~]# ll /etc/yum.repos.d/
合計 32
-rw-r--r--. 1 root root 1664  9月  5  2019 CentOS-Base.repo
-rw-r--r--. 1 root root 1309  9月  5  2019 CentOS-CR.repo
-rw-r--r--. 1 root root  649  9月  5  2019 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630  9月  5  2019 CentOS-Media.repo
-rw-r--r--. 1 root root 1331  9月  5  2019 CentOS-Sources.repo
-rw-r--r--. 1 root root 6639  9月  5  2019 CentOS-Vault.repo
-rw-r--r--. 1 root root  314  9月  5  2019 CentOS-fasttrack.repo
[root@tspshell01 ~]#
  • インターネット上に接続できていること

手順

手順についてはこちらになります。

①ファイアウォールを無効化する(もしくはポートを開放する)
②リポジトリファイルの読み込み
③GNOMEデスクトップのインストール
④epelリポジトリのインストール
⑤リモートデスクトップに必要なパッケージのインストール
⑥動作確認

では、解説していきます。

①ファイアウォールを無効化する(もしくはポートを開放する)

  • ファイアウォール無効化/自動起動無効
・ファイアウォール停止
systemctl status firewalld
systemctl stop firewalld
systemctl status firewalld

・ファイアウォール無効化
systemctl is-enabled firewalld
systemctl disable firewalld
systemctl is-enabled firewalld
  • 3389ポート開放(ファイアウォールを停止しない場合)
firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --reload
firewall-cmd --list-all

②リポジトリファイルの読み込み

※リポジトリ(repository)とはファイルの保管場所になります。
「/etc/yum.repos.d」直下にファイルの保管場所へアクセスするための接続先が記載されたファイルが保存されています。

  • yumのキャッシュクリア
yum clean all
  • 「/etc/yum.repos.d」直下のファイルの読み込み
yum repolist all

→「base/7/x86_64」が有効であることを確認

③GNOMEデスクトップのインストール

yum groupinstall "GNOME Desktop"

※インストール直前に「yes」か「no」を聞かれるので、「y」を実行

④epelリポジトリのインストール

「epelリポジトリ」は「xrdp」のインストールに使用します。

  • 「/etc/yum.repos.d」直下にepelリポジトリをインストール
yum install epel
  • 「/etc/yum.repos.d」直下に「epel.repo」があることを確認
[root@tspshell01 yum.repos.d]# ll /etc/yum.repos.d/
合計 36
-rw-r--r--. 1 root root 1664  9月  5  2019 CentOS-Base.repo
-rw-r--r--. 1 root root  649  9月  5  2019 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630  9月  5  2019 CentOS-Media.repo
-rw-r--r--. 1 root root 1331  9月  5  2019 CentOS-Sources.repo
-rw-r--r--. 1 root root 6639  9月  5  2019 CentOS-Vault.repo
-rw-r--r--. 1 root root  314  9月  5  2019 CentOS-fasttrack.repo
-rw-r--r--  1 root root 1050 10月  3  2017 epel-testing.repo
-rw-r--r--  1 root root  951 10月  3  2017 epel.repo
[root@tspshell01 yum.repos.d]#
  • yumのキャッシュクリアを実施
yum clean all
  • 「/etc/yum.repos.d」直下のファイルの読み込み
yum repolist all

⑤リモートデスクトップに必要なパッケージのインストール

  • パッケージインストール
yum install tigervnc-server
yum install xrdp

※「yes」か「no」の選択肢については全て「y」にて実施

  • xrdpサービス起動/自動起動
・xrdpサービス起動
systemctl status xrdp
systemctl start xrdp
systemctl status xrdp
・xrdp自動起動
systemctl is-enabled xrdp
systemctl enable xrdp
systemctl is-enabled xrdp

⑥動作確認

  • リモートデスクトップを起動後、IPアドレスを入力&接続
    (「mstsc」にて一発起動可能)

7.JPG

  • 接続成功した場合、ログイン画面が表示される。 サーバーのユーザー名/パスワードを入力

8.JPG

  • ログイン成功した場合は、このような画面が表示される。 9.JPG

リモートデスクトップができない場合(もしくはログインできない場合)

  • セッションの変更
  • 画面の色深さ設定

セッションの変更

※ログイン後に画面が真っ暗で表示されない場合の対処方法になります。

「Xvnc」→「Xorg」

  • 設定ファイルバックアップ
cp -p /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini_`date "+%Y%m%d_%H%M%S"`
  • ファイルバックアップの確認
[root@tspshell01 yum.repos.d]# ll /etc/xrdp | grep xrdp
-rw-r--r-- 1 root root  5427  3月 11 19:53 xrdp.ini
-rw-r--r-- 1 root root  5427  3月 11 19:53 xrdp.ini_20200518_223104
-rw-r--r-- 1 root root  3570  3月 11 19:53 xrdp_keyboard.ini
[root@tspshell01 yum.repos.d]#
  • ファイル内容変更
vi /etc/xrdp/xrdp.ini

※「vi」の使用方法については割愛します。

修正前

#[Xorg]
#name=Xorg
#lib=libxup.so
#username=ask
#password=ask
#ip=127.0.0.1
#port=-1
#code=20

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000

修正後

[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

#[Xvnc]
#name=Xvnc
#lib=libvnc.so
#username=ask
#password=ask
#ip=127.0.0.1
#port=-1
#xserverbpp=24
#delay_ms=2000

→ログイン画面に「Xorg」のみ表示させる設定

  • バックアップファイルと比較
diff /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini_20200518_223104

実行結果

[root@tspshell01 yum.repos.d]# diff /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini_20200518_223104
181,192c181,183
< [Xorg]
< name=Xorg
< lib=libxup.so
< username=ask
< password=ask
< ip=127.0.0.1
< port=-1
< code=20
<
< #[Xvnc]
< #name=Xvnc
< #lib=libvnc.so
---
> #[Xorg]
> #name=Xorg
> #lib=libxup.so
196a188,196
> #code=20
>
> [Xvnc]
> name=Xvnc
> lib=libvnc.so
> username=ask
> password=ask
> ip=127.0.0.1
> port=-1
[root@tspshell01 yum.repos.d]#

→編集した箇所のみ差異があること

  • 「xrdp」サービス再起動
systemctl status xrdp
systemctl restart xrdp
systemctl status xrdp
  • リモートデスクトップ実施

接続できることを確認(sessionが「Xorg」に変更されている)

10.JPG

画面の色深さ設定

※ログイン後にGUI画面の表示がおかしい場合の対処方法になります。

- 設定ファイルバックアップ

cp -p /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini_`date "+%Y%m%d_%H%M%S"`
  • ファイルバックアップ確認
[root@tspshell01 yum.repos.d]# ll /etc/xrdp | grep xrdp
-rw-r--r-- 1 root root  5426  5月 18 22:37 xrdp.ini
-rw-r--r-- 1 root root  5427  3月 11 19:53 xrdp.ini_20200518_223104
-rw-r--r-- 1 root root  5426  5月 18 22:37 xrdp.ini_20200518_224629
-rw-r--r-- 1 root root  5426  5月 18 22:37 xrdp.ini_20200518_224633
-rw-r--r-- 1 root root  3570  3月 11 19:53 xrdp_keyboard.ini
[root@tspshell01 yum.repos.d]#
  • 設定ファイル変更
vi /etc/xrdp/xrdp.ini

修正前

max_bpp=32

修正後

max_bpp=24
  • バックアップファイルと比較
[root@tspshell01 yum.repos.d]# diff /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini_202005
18_224633
73c73
< max_bpp=24
---
> max_bpp=32
[root@tspshell01 yum.repos.d]#

→編集した箇所のみ差異があること

  • 「xrdp」サービス再起動
systemctl status xrdp
systemctl restart xrdp
systemctl status xrdp
  • リモートデスクトップ実施

接続できることを確認

9.JPG

参考ページ

CentOS7にxrdpを導入しWindowsからリモートデスクトップで接続
https://qiita.com/shinoere/items/35793d9c6155145cb37c

xrdp
https://qiita.com/n-yamanaka/items/653af5cdac63721ff074

Twitter

主にインフラエンジニアのキャリアハック等について呟いています。**
https://twitter.com/satton6987

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

Secure ROS with AppArmor

Overview

ROS2(Robot Operating System 2) Security has access control via AppArmor, it is built on top of Linux Security MNodules, available on Linux 2.6.36.

Here describes the following,

Background

UNIX controls permission via user, group and so on as legacy access control. for specific access granted control we used to use root, but root is wide-open permission can access on anything. there was use case, user wants to have certain access permission but not root privileged access permission for security. against this situation, AppArmor or SELinux has been developed.

for my experience,

  • SELinux is way more complicated to use, system perspective.
  • AppArmor is easier to enable, application perspective.

also these are dependent on use cases, and precisely what you want to protect.

Linux Security Modules

LSM is Linux Kernel security framework. It is provided not only to AppArmor but also SELinux as base security framework in Linux. It is not loadable module, it is statically build with the following configuration.

>cat /boot/config-5.3.0-51-generic | grep CONFIG_LSM
CONFIG_LSM_MMAP_MIN_ADDR=0
CONFIG_LSM="yama,integrity,apparmor"

as implementation, refer to around https://github.com/torvalds/linux/blob/master/security/apparmor/lsm.c

e.g)
static void apparmor_cred_free(struct cred *cred)
{
    aa_put_label(cred_label(cred));
    set_cred_label(cred, NULL);
}

These are dedicated AppArmor static functions will be registered as LSM hook callback. LSM provides generic interface to connect backend callbacks which are AppArmor implementation which set label and restrict the access from the application based on profile.

AppArmor Tutorial

LSM provides limitation and constrain to access based on the user specified profile. So that is user's responsibility to set appropriate access profile.

AppArmor has two modes,

  1. Complain Access will be checked, but not actually blocked. (such as SELinux permissive mode.)
  2. Enforce Access will be checked and blocked if not with access permission.

command line tool is available to check current status,

# aa-status 
apparmor module is loaded.
42 profiles are loaded.
39 profiles are in enforce mode.
...<snip>

profile files are store in /etc/apparmor.d

# ls -F /etc/apparmor.d/
abstractions/    sbin.dhclient    usr.lib.libreoffice.program.oosplash     usr.sbin.cups-browsed
cache/           tunables/        usr.lib.libreoffice.program.senddoc      usr.sbin.cupsd
disable/         usr.bin.evince   usr.lib.libreoffice.program.soffice.bin  usr.sbin.ippusbxd
force-complain/  usr.bin.firefox  usr.lib.libreoffice.program.xpdfimport   usr.sbin.rsyslogd
local/           usr.bin.man      usr.lib.snapd.snap-confine.real          usr.sbin.tcpdump

let's see what inside of profile,

# ls /etc/apparmor.d/usr.bin.man
/etc/apparmor.d/usr.bin.man

this profile applied to /usr/bin/man

# cat /etc/apparmor.d/usr.bin.test
#include <tunables/global>

profile test /usr/lib/test/test_binary {
    #include <abstractions/base>

    # Main libraries and plugins
    /usr/share/TEST/** r,
    /usr/lib/TEST/** rm,

    # Configuration files and logs
    @{HOME}/.config/ r,
    @{HOME}/.config/TEST/** rw,
}
  • r: read
  • w: write
  • m: memory map executable
  • x: executable
  • @: environmental variables, declared in /etc/apparmor.d/abstractions/ or /etc/apparmor.d/tunables/

http://manpages.ubuntu.com/manpages/xenial/man5/apparmor.d.5.html

AppArmor will parse the profile into binary format when loading, so it takes time to be effective. This means boot time will be longer than usual sometimes, so it can cache the binary profile data in the file system.

# cat /etc/apparmor/parser.conf
# parser.conf is a global AppArmor config file for the apparmor_parser
#
...<snip>
## Turn creating/updating of the cache on by default
#write-cache

uncomment above write-cache line to make it faster to boot up, also if you want you can add cache-loc=/path/to/location to store the cached data.

Reference

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

lessコマンドでよく使う使い方ベスト3

はじめに

ログ調査する時にlessコマンドを使っています。
自分がよく使う使い方のベスト3をまとめます。

よく使う使い方・オプション

# 1. 特定の文言で検索して、ファイル内容を確認したいとき
grep 検索したい文言 ファイル名 | less

# 2. ログの1文が長い時に折り返さないで表示したいとき
less -S ファイル名

# 3. 行番号を表示したいとき
less -N ファイル名

lessで表示中のキー操作

キー 説明
/ 検索する
n 次を検索する
F 末尾に追加があった場合更新する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ファイルを保存時に自動でテストを実行する

テスト駆動開発において、「ファイルを更新」 -> 「コンソールでテストコマンドを実行」 というプロセスが面倒でした。
そこで、このプロセスを自動化する方法を記載します。

動作イメージ

test.gif

環境

  • Ubuntu 18.04

準備

sudo apt install inotify-tools

コード

以下のスクリプトを作成し、プロジェクトのルートに配置します。

autorun.sh
#!/usr/bin/env bash

TEST_RUNNER="pytest -s tests" # 実行したいテストコマンドを指定
TARGETS="./src ./tests" # 監視したディレクトリを指定

while inotifywait -r -e modify -e create -e delete $TARGETS; do
  $TEST_RUNNER
done

実行権限も付与。

chmod +x ./autorun.sh

実行

./autorun.sh

参考

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

Linux基礎1 -シェルとは何か?-

内容

  • Linux基礎

シェルとは何か?

Linuxでは、キーボードを使ってコマンドを入力することが基本操作になる。
このとき、LinuxカーネルとUserの橋渡しをしてくれるのがシェル

シェルとコマンド

  • コマンド -> 処理を行うための命令のようなもの。日時を扱うdateや指定した文字列を表示するechoなどがある。
# dateコマンドの実行
[nossy@localhost ~]$ date
2020年 5月 18日 月曜日 15:00:00 JST

# echoコマンドの実行
[nossy@localhost ~]$ echo Hello
Hello

シェルとカーネル

  • カーネル -> OSの中核。CPUやメモリなどのハードウェアの管理とコマンド実行を処理するプロセス管理を行う。
  • シェル -> アプリ起動に特化し、ユーザへのインターフェースとなっているソフト

シェルとカーネルの動作

スクリーンショット 2020-05-18 21.01.32.png

  1. シェルはUserからのコマンド入力を受け付ける
  2. シェルはコマンドを探して、カーネルに実行を依頼する
  3. カーネルは依頼内容に応じたアプリを起動する
  4. シェルから起動されたアプリは、個別にユーザへ結果を出力する

※シェルを例えるなら「司会者」
進行指示に応じて色んな人に話を振って、実際に話をするのは、振られた各担当者

詳しくはシェル(UNIX)のイメージのよくある誤解を参照のこと

なぜシェルとカーネルが別れているのか

  • カーネルに手を加えずにシェルだけを自分好みに設定できる
  • Linux以外のOSを利用する際も、シェルが移植されていれば操作を同様に行うことができる
  • シェルがエラーや高負荷状態になってクラッシュしても、OS本体であるカーネルへの影響を最小限に抑えることができる

プロンプト

  • プロンプト -> 何かコマンドを入力してください、というシェルの意思表示の現れ
[nossy@localhost ~]$
  • nossyユーザ名
  • localhostホスト名
  • $プロンプト記号
    • スーパーユーザーの場合は #
    • 一般ユーザの場合は $

ログインシェル

ログイン時に最初から起動されるシェルのこと

$ echo $SHELL #ログインシェルの確認コマンド
/bin/bash

この場合のログインシェルは /binディレクトリのbash

対話型操作とシェルスクリプト

  • 対話型 -> Userがキーボードと画面を利用して直接シェルを操作する方法(インタラクティブともいう)。
  • シェルスクリプト -> 実行したいコマンド群をファイルに記述しておいて、そのファイルをシェルに指定することでまとめて実行することができる。一連の流れを記述したファイルのことをシェルスクリプトと呼ぶ  

シェルの種類

シェル 概要
sh Bourne氏によって開発された、古くから存在するシェル。Bシェルと呼ばれる。古いため機能が少なく、対話的に使うには不便。現在ではログインシェルとして使われることはほとんどない。
csh Cシェルと呼ばれる。shに比べ、対話型操作が便利になる機能を実装したことで人気があったが、シェルスクリプトを書く上で欠陥がある。cshの後継のtcshがあるため、ほとんど使用されない。
bash shを基本として機能を拡張したシェル。shと後方互換性をもつため、単純にshを置き換える用途でも利用できる。対話型として十分な機能を持ち、多くのLinux環境でデフォルトのログインシェルとして使用されている。シェルスクリプトを記述するのにも向いている。
tcsh cshの光景をして開発されたCシェル系のシェル。対話型には便利な機能を持っているが、シェルスクリプトには不向き。なおtcshなどのCシェル系では、一般ユーザーのプロンプト記号として$ではなく%が用いられる。徐々に利用者は減っている模様。
zsh 比較的新しいシェル。bashやtcshをはじめとした他のシェルの機能を取り込み、機能面では他のシェルを圧倒している。全ての機能を使いこなせば非常に効率よく作業できることから人気の高いシェル。玄人向。

どのシェルを選ぶべきか

Linuxの学習にはbashがおすすめ

理由

  • Linuxのデフォルトログインシェルとして採用されており、利用機会が多い
  • 定和的に使うにも、シェルスクリプトを利用するにも、十分な機能を持っている
  • shと後方互換性をもつため、既存のsh用のシェルスクリプトをそのまま利用できる。
  • Linux以外にもFreeBSD/Solaris/Mac OS Xなど多くの環境に移植されている
  • 利用者が多く、書籍やWebから情報が得やすい

shは重要なシェル

過去にshで書かれたシェルスクリプトは数多く、例えば、Linuxの起動処理では多くのshシェルスクリプトが使われている。

C系シェルはさほど重要ではない

シェルスクリプトを書くのに致命的な欠陥が多いため、過去のスクリプトを修正するという一部のケースを除いて使うべきではない。対話型として用いたい場合にもzshがあるため、それで良い。

シェルを一時的に切り替える

  • シェルも1つのコマンド。単に使いたいシェルの名前を指定すれば切り替えが可能。実際は多重に起動しているため、重ねているという認識。下の図を参照。
  • ログインシェルの変更はchshというコマンドで可能だが、操作を誤るとログインできなくなる可能性があるため玄人向け。

スクリーンショット 2020-05-18 15.48.18.png

ターミナルとは

  • ターミナル -> ユーザがコンピュータに入出力する際に利用する専用のハードウェアのこと。

現在のLinuxを利用する際に、ハードウェアとしてのターミナルが使われることはほとんどない。その代わりに物理的なターミナルをソフトウェアによって実装した、ターミナルエミュレータが利用される。ターミナルエミュレータはLinuxマシンを直接動作させることも可能。また、MaxOS Xなど一般的なパソコン上でアプリケーションとして利用可能。

主なターミナルエミュレータ

OS ターミナルエミュレータ
windows Putty, Tera Term
MacOS X ターミナル, iTerm2
Linux GNOME端末, Konsole

ターミナルとシェル

ターミナルとシェルは全く違うソフトウェア。
ターミナルエミュレータは入出力のためのインターフェイス(画面)を提供しているだけ。

ターミナルエミュレータのウィンドウの中で、Linuxマシンのシェルが動作している。

参考
新しいLinuxの教科書(書籍)
シェル(UNIX)のイメージのよくある誤解

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

Linux基礎 -シェルとは何か?-

内容

  • Linux基礎

シェルとは何か?

Linuxでは、キーボードを使ってコマンドを入力することが基本操作になる。
このとき、LinuxカーネルとUserの橋渡しをしてくれるのがシェル

シェルとコマンド

  • コマンド -> 処理を行うための命令のようなもの。日時を扱うdateや指定した文字列を表示するechoなどがある。
# dateコマンドの実行
[nossy@localhost ~]$ date
2020年 5月 18日 月曜日 15:00:00 JST

# echoコマンドの実行
[nossy@localhost ~]$ echo Hello
Hello

シェルとカーネル

  • カーネル -> OSの中核。CPUやメモリなどのハードウェアの管理とコマンド実行を処理するプロセス管理を行う。
  • シェル -> アプリ起動に特化し、ユーザへのインターフェースとなっているソフト

シェルとカーネルの動作

スクリーンショット 2020-05-18 21.01.32.png

  1. シェルはUserからのコマンド入力を受け付ける
  2. シェルはコマンドを探して、カーネルに実行を依頼する
  3. カーネルは依頼内容に応じたアプリを起動する
  4. シェルから起動されたアプリは、個別にユーザへ結果を出力する

※シェルを例えるなら「司会者」
進行指示に応じて色んな人に話を振って、実際に話をするのは、振られた各担当者

詳しくはシェル(UNIX)のイメージのよくある誤解を参照のこと

なぜシェルとカーネルが別れているのか

  • カーネルに手を加えずにシェルだけを自分好みに設定できる
  • Linux以外のOSを利用する際も、シェルが移植されていれば操作を同様に行うことができる
  • シェルがエラーや高負荷状態になってクラッシュしても、OS本体であるカーネルへの影響を最小限に抑えることができる

プロンプト

  • プロンプト -> 何かコマンドを入力してください、というシェルの意思表示の現れ
[nossy@localhost ~]$
  • nossyユーザ名
  • localhostホスト名
  • $プロンプト記号
    • スーパーユーザーの場合は #
    • 一般ユーザの場合は $

ログインシェル

ログイン時に最初から起動されるシェルのこと

$ echo $SHELL #ログインシェルの確認コマンド
/bin/bash

この場合のログインシェルは /binディレクトリのbash

対話型操作とシェルスクリプト

  • 対話型 -> Userがキーボードと画面を利用して直接シェルを操作する方法(インタラクティブともいう)。
  • シェルスクリプト -> 実行したいコマンド群をファイルに記述しておいて、そのファイルをシェルに指定することでまとめて実行することができる。一連の流れを記述したファイルのことをシェルスクリプトと呼ぶ  

シェルの種類

シェル 概要
sh Bourne氏によって開発された、古くから存在するシェル。Bシェルと呼ばれる。古いため機能が少なく、対話的に使うには不便。現在ではログインシェルとして使われることはほとんどない。
csh Cシェルと呼ばれる。shに比べ、対話型操作が便利になる機能を実装したことで人気があったが、シェルスクリプトを書く上で欠陥がある。cshの後継のtcshがあるため、ほとんど使用されない。
bash shを基本として機能を拡張したシェル。shと後方互換性をもつため、単純にshを置き換える用途でも利用できる。対話型として十分な機能を持ち、多くのLinux環境でデフォルトのログインシェルとして使用されている。シェルスクリプトを記述するのにも向いている。
tcsh cshの光景をして開発されたCシェル系のシェル。対話型には便利な機能を持っているが、シェルスクリプトには不向き。なおtcshなどのCシェル系では、一般ユーザーのプロンプト記号として$ではなく%が用いられる。徐々に利用者は減っている模様。
zsh 比較的新しいシェル。bashやtcshをはじめとした他のシェルの機能を取り込み、機能面では他のシェルを圧倒している。全ての機能を使いこなせば非常に効率よく作業できることから人気の高いシェル。玄人向。

どのシェルを選ぶべきか

Linuxの学習にはbashがおすすめ

理由

  • Linuxのデフォルトログインシェルとして採用されており、利用機会が多い
  • 定和的に使うにも、シェルスクリプトを利用するにも、十分な機能を持っている
  • shと後方互換性をもつため、既存のsh用のシェルスクリプトをそのまま利用できる。
  • Linux以外にもFreeBSD/Solaris/Mac OS Xなど多くの環境に移植されている
  • 利用者が多く、書籍やWebから情報が得やすい

shは重要なシェル

過去にshで書かれたシェルスクリプトは数多く、例えば、Linuxの起動処理では多くのshシェルスクリプトが使われている。

C系シェルはさほど重要ではない

シェルスクリプトを書くのに致命的な欠陥が多いため、過去のスクリプトを修正するという一部のケースを除いて使うべきではない。対話型として用いたい場合にもzshがあるため、それで良い。

シェルを一時的に切り替える

  • シェルも1つのコマンド。単に使いたいシェルの名前を指定すれば切り替えが可能。実際は多重に起動しているため、重ねているという認識。下の図を参照。
  • ログインシェルの変更はchshというコマンドで可能だが、操作を誤るとログインできなくなる可能性があるため玄人向け。

スクリーンショット 2020-05-18 15.48.18.png

ターミナルとは

  • ターミナル -> ユーザがコンピュータに入出力する際に利用する専用のハードウェアのこと。

現在のLinuxを利用する際に、ハードウェアとしてのターミナルが使われることはほとんどない。その代わりに物理的なターミナルをソフトウェアによって実装した、ターミナルエミュレータが利用される。ターミナルエミュレータはLinuxマシンを直接動作させることも可能。また、MaxOS Xなど一般的なパソコン上でアプリケーションとして利用可能。

主なターミナルエミュレータ

OS ターミナルエミュレータ
windows Putty, Tera Term
MacOS X ターミナル, iTerm2
Linux GNOME端末, Konsole

ターミナルとシェル

ターミナルとシェルは全く違うソフトウェア。
ターミナルエミュレータは入出力のためのインターフェイス(画面)を提供しているだけ。

ターミナルエミュレータのウィンドウの中で、Linuxマシンのシェルが動作している。

参考
新しいLinuxの教科書(書籍)
シェル(UNIX)のイメージのよくある誤解

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

USB Raw Gadget

https://www.kernel.org/doc/html/latest/usb/raw-gadget.html

Linux Kernel 5.7-rc1からサポートされた、USB Raw Gadget!
やったね!!ユーザー空間でうごくアプリケーションで、USB Gadgetが作れるようになったよ!


Docs » USB support » USB Raw Gadget

USB Raw Gadget

USB Raw Gadget is a kernel module that provides a userspace interface for the USB Gadget subsystem. Essentially it allows to emulate USB devices from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is currently a strictly debugging feature and shouldn’t be used in production, use GadgetFS instead.

USB Raw Gadgetは、USB Gadget subsystemへのユーザー空間インタフェイスを提供するものです。本質的には、ユーザー空間からUSB deviceをエミュレーションすることを許容します。CONF_USB_RAW_GADGETを有効にしてください。Raw Gadgetは現在、厳密にデバッグ中の機能であり、製品では使わないでください。その代わりに、GadgetFSを使ってください。

Comparison to GadgetFS

Raw Gadget is similar to GadgetFS, but provides a more low-level and direct access to the USB Gadget layer for the userspace. The key differences are:

Raw GadgetはGadgetFSに似ていますが、ユーザー空間からUSB Gadget layerへ、低レベルで直接的なアクセスを提供します。主な差分は以下です。

1. Every USB request is passed to the userspace to get a response, while GadgetFS responds to some USB requests internally based on the provided descriptors. However note, that the UDC driver might respond to some requests on its own and never forward them to the Gadget layer.

1. すべてのUSB要求は、応答を得るためにユーザー空間へ渡されます。GadgetFSでは提供された記述子(descriptor)に応じて、内部的に一部のUSB要求へ応答をします。ただし、UDCドライバーは一部の要求に独自で応答し、それらをGadget Layerに転送しない場合があります。

2. GadgetFS performs some sanity checks on the provided USB descriptors, while Raw Gadget allows you to provide arbitrary data as responses to USB requests.

2. GadgetFSは提供されたUSB記述子において正当性を確認します。Raw GadgetではUSB要求への応答として任意のデータを提供することができます。

3. Raw Gadget provides a way to select a UDC device/driver to bind to, while GadgetFS currently binds to the first available UDC.

3. Raw Gadgetでは、バインドしたいUDC device/driverを選択する手段を提供しますが、GadgetFSでは現在、最初に有効なUDCをバインドします。

4. Raw Gadget uses predictable endpoint names (handles) across different UDCs (as long as UDCs have enough endpoints of each required transfer type)

4. Raw Gadgetは、異なるUDCを横断して、予想できるendpoint name(handke)を利用します(UDCに必要なとなるそれぞれの転送タイプ.のendpointが十分ある場合に限っては)。

5.Raw Gadget has ioctl-based interface instead of a filesystem-based one.

5. Raw Gadgeはfilesystem-basedの代わりに、uictl-baseのインタフェイスを提供します。

Userspace interface

To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget instances (bound to different UDCs) can be used at the same time. The interaction with the opened file happens through the ioctl() calls, see comments in include/uapi/linux/usb/raw_gadget.h for details.

Raw Gadget instanceを作るためには、/dev/raw-gadetを開いてください。複数のraw-gadget instanceを(異なるUDCsのために)同じ時間で利用することができます。開いたファイルとの対話には、ioctl() を呼び出します。詳細については、include/uapi/linux/usb/raw_gadget.hのコメントを参照してください。

The typical usage of Raw Gadget looks like:

典型的なRaw Gadgetの使い方は以下になります。

1. Open Raw Gadget instance via /dev/raw-gadget.
2. Initialize the instance via USB_RAW_IOCTL_INIT.
3. Launch the instance with USB_RAW_IOCTL_RUN.
4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from Raw Gadget and react to those depending on what kind of USB device needs to be emulated.

1.Raw Gadget instanceを、/dev/raw-gadetを介して開く。
2.USB_RAW_IOCTL_INITによって、インスタンスを初期化する。
3.USB_RAW_IOCTL_RUNによって、インスタンスを起動する。
4.RAW_IOCTL_EVENT_FETCHにより、Raw Gadgetからのイベントを受信しながらループを行い、エミュレーションするべきUSB deviceのような反応をする。

Potential future improvements

・Implement ioctl’s for setting/clearing halt status on endpoints.
・Reporting more events (suspend, resume, etc.) through USB_RAW_IOCTL_EVENT_FETCH.
・Support O_NONBLOCK I/O.

・endpointの停止ステータスを設定/クリアするための、ioctlの実装
・USB_RAW_IOCTL_EVENT_FETCHを介しての様々なイベント(suspend, resume, 他)のレポート。
・O_NONBLOCK I/Oのサポート。


もともと、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で続きを読む

ibusが行方不明になる症状改善策

ibusが行方不明になる症状改善策

備忘録です。

ibusが行方不明になる症状の改善策
On kde
ibus-daemon autostart

  1. Open Ibus-Preferences (Press yes and start the daemon)
    When Ibus-preferences window opens do not close it.

  2. Now goto application menu and search Input Method. Open it.
    It will show a msg just press ok and then on the 2nd msg press yes to update it.
    Then select Ibus and press ok.
    You're done.

  3. Then goto application menu -> auto start-> add (ibus-daemon)

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