20190822のLinuxに関する記事は8件です。

デュアルブートで環境を吹っ飛ばしがちな人のためのメモ(Ubuntu編)

はじめに

私はROS(Robot Operating System)ユーザであるためWindows/MacとUbuntuとのデュアルブートで使う機会が多い。もちろん、たまにブートローダやパーティション情報が吹っ飛び文鎮化します。私の経験の中で起きたトラブルを元にいくつか対象方法をメモしておきます。  
この記事が、急に動かなくなったPCの前で途方に暮れている誰かの参考になればと思います。

対処法

症状:起動ディスクとして認識してくれない。
対処法:ブートローダを直す。(ここでは、UEFIブートについて記述します。)

1. LiveUSBでUbuntuを起動する。

日本ミラーから落とすと早いので、なるべく日本ミラーから落としましょう。例)Ubuntu Releases(日本ミラー:富山大学)

2. ターミナルを開く

3. どのディスクを使っているか確認する。(ルートのディスクを確認する。この場合は/dev/sda1(BL)と/dev/sda4(Root))

$ df -h
/dev/sda4       118G   60G   52G  54% /
/dev/sda1       197M   33M  164M  17% /boot/efi

4. 次のコマンドを実行

  • やっている事的には、内容的には生きているディスクをマウントして、chrootで動かしてブートローダを再インストールしている。
  • この方法は当たり前ですが、ディスク自体が死んでいる場合は無効です。

SATA形式のディスク

$ sudo mount /dev/sda4 /mnt                  # root
$ sudo mount /dev/sda1 /mnt/boot/efi         # BL
$ sudo mount -B /dev /mnt/dev                # DIRs
$ sudo mount -B /dev/pts /mnt/dev/pts
$ sudo mount -B /proc /mnt/proc
$ sudo mount -B /sys /mnt/sys
$ sudo mount -B /run /mnt/run
$ sudo cp /etc/resolv.conf /mnt/etc/
$ sudo chroot /mnt
$ apt install --reinstall grub-efi-amd64 linux-generic linux-headers-generic
$ update-initramfs -c -k all
$ sudo update-grub

NVMe形式のディスク

ディスク番号で悩んで、途方に暮れてた経験があったのでNVMeもついでに記載。df -hで調べる大前提は変わりませんが、nvme?n?p?という基本フォーマットを事前に知っているだけでも大分安心感が違うはず。

$ sudo mount /dev/nvme0n1p2 /mnt             # root
$ sudo mount /dev/nvme0n1p1 /mnt/boot/efi    # BL
$ sudo mount -B /dev /mnt/dev                # DIRs
$ sudo mount -B /dev/pts /mnt/dev/pts
$ sudo mount -B /proc /mnt/proc
$ sudo mount -B /sys /mnt/sys
$ sudo mount -B /run /mnt/run
$ sudo cp /etc/resolv.conf /mnt/etc/
$ sudo chroot /mnt
$ apt install --reinstall grub-efi-amd64 linux-generic linux-headers-generic
$ update-initramfs -c -k all
$ sudo update-grub

終わりに

新しいピンチに出会ったらまた追記します。

参考文献

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

【金沢工大】 LinuxからVPNを使う方法 bashでコマンド一発でログイン

金沢工業大学のVPNにLinuxから繋ぐ方法 bashでコマンド一発でログイン

GitHubにこんなソースコードが有ります。openfortivpnというらしいです。
https://github.com/adrienverge/openfortivpn

openfortivpnリポジトリは、ホームディレクトリ(つまり /home/username/)に配置してください。配置した後のパスは、/home/username/openfortivpn/のようになります。

次に、expectというパッケージをapt-getでインストールします。

sudo apt-get install expect

openfortivpnはconfigファイルを書くことでも設定できるそうですが、私は面倒なのでbashのスクリプト書きました。(苦笑

#!/bin/sh

PW="my_linux_sudo_password"
VPN_PW="my_vpn_password"
expect -c "
spawn sudo /home/username/openfortivpn/openfortivpn ras2.kanazawa-it.ac.jp:10443 -u a1234567
expect \"username:\"
send \"${PW}\n\"
expect \"password:\"
send \"${VPN_PW}\n\"
set timeout 10
"

my_linux_sudo_passwordに、linuxのsudoパスワードを、
VPN_PWにvpnの申請時に登録した自分のパスワードを入力します。

a1234567となっている部分は、自分の学籍番号に置き換えてください。

設定が終わったら、このスクリプトをVPNforticlient.shなど適当な名前で保存して、ホームディレクトリにでも配置します。

最後に、接続をテストします。

bash VPNforticlient.py

終わり。

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

Windows に WSL を 入れた とき に 出た エラー の 解決法

目的

  • WSLでUbuntu18.04を入れたがエラーが出た。

症状と解決法

下記画像のようなエラーが出た

~エラー文~

```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
See https://aka.ms/wslinstall for details.
Press any key to continue...
```

WSL_01.png

  1. Windowsのスタートボタンを右クリック→アプリと機能をクリックすると下記画面が開く
    WSL_02.png

  2. プログラムと機能をクリック
    WSL_03.png

  3. Windowsの機能の有効化または無効化をクリック
    WSL_04.png

  4. windows Subsystem for LinuxにチェックをいれてOK
    WSL_05.png

  5. PCを再起動する
    WSL_06.png

  6. もう一度Ubuntuを立ち上げる

  7. 画像のようなメッセージが出るので待つ
    WSL_07.png

  8. Ubuntuでのユーザ名を入力
    WSL_08.png

  9. PWを入力エンター

  10. PWを入力エンター

  11. 画像みたいになればOK
    WSL_09.png

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

Windows に WSL を 有効せずに 入れた とき に 出た エラー の 解決法

目的

  • うっかりしてWSLを有効にせずにUbuntu18.04を入れたときに出たエラーの解決法を知る。

症状と解決法

下記画像のようなエラーが出た

~エラー文~

```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
See https://aka.ms/wslinstall for details.
Press any key to continue...
```

WSL_01.png

  1. Windowsのスタートボタンを右クリック→アプリと機能をクリックすると下記画面が開く
    WSL_02.png

  2. プログラムと機能をクリック
    WSL_03.png

  3. Windowsの機能の有効化または無効化をクリック
    WSL_04.png

  4. windows Subsystem for LinuxにチェックをいれてOK
    WSL_05.png

  5. PCを再起動する
    WSL_06.png

  6. もう一度Ubuntuを立ち上げる

  7. 画像のようなメッセージが出るので待つ
    WSL_07.png

  8. Ubuntuでのユーザ名を入力
    WSL_08.png

  9. PWを入力エンター

  10. PWを入力エンター

  11. 画像みたいになればOK
    WSL_09.png

原因

  • 目的にもすでに書いてあるが今回のエラーの原因は、WSLを有効にせずにMicrosoft storeでUbuntuをインストールしてしまったことだった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux + Ubuntu + Django + Apache

Linux종류

ubuntu

  • 데비안계열
  • 설치간단
  • 초심자용

CentOS

  • 유료 리눅스인 레드햇을 상표권만 제거
  • 안정적이고 레드햇의 기술을 무료로 사용할 수 있다.

ubuntu + Django + Apache2 + mod_Wsgi 설치

1. ubuntu

  • LTS(Long Term Service) : 지원기간 5년, 다른버전은 6~9개월마다 업그레드 권장
  • Desktop 버전 다운
  • iso 파일을 DVD로 구워 설치 > 윈도우 기본 기능으로 컨버팅

2. django

  • 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크

  • Linux에 기본탑제

qiita.rb
# 버전확인
$ python3 --version
Python 3.6.1

# 버전선택설치
$ sudo apt install python3.6
  • 에디터 설치

  • 장고설치하기

    • 1. 가상환경(Virtual environment)
qiita.rb
# home 디렉토리 아래 작업폴더생성
$ mkdir djangogirls
$ cd djangogirls

# myenv 라는 이름의 가상환경 만들기
$ python3 -m venv myvenv

# 가상환경 실행
$ source myvenv/bin/activate

2.1. ダウンロード

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

Linux

Linux종류

ubuntu

  • 데비안계열
  • 설치간단
  • 초심자용

CentOS

  • 유료 리눅스인 레드햇을 상표권만 제거
  • 안정적이고 레드햇의 기술을 무료로 사용할 수 있다.

ubuntu + Django + Apache2 + mod_Wsgi 설치

1. ubuntu

  • LTS(Long Term Service) : 지원기간 5년, 다른버전은 6~9개월마다 업그레드 권장
  • Desktop 버전 다운
  • iso 파일을 DVD로 구워 설치 > 윈도우 기본 기능으로 컨버팅

2. django

  • 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크

  • Linux에 기본탑제

qiita.rb
# 버전확인
$ python3 --version
Python 3.6.1

# 버전선택설치
$ sudo apt install python3.6
  • 에디터 설치

  • 장고설치하기

    • 1. 가상환경(Virtual environment)
qiita.rb
# home 디렉토리 아래 작업폴더생성
$ mkdir djangogirls
$ cd djangogirls

# myenv 라는 이름의 가상환경 만들기
$ python3 -m venv myvenv

# 가상환경 실행
$ source myvenv/bin/activate

2.1. ダウンロード

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

Linuxのタブキーの入力補完で大文字小文字を無視する

キャメルケースのプロジェクトとかをタブキーで入力補完しようとしてもしてくれないので対処法メモ

やりたい事

/tmp/Hoge/Fuga/Piyo.pm というディレクトリがあったとして

/tmp/ho の状態でタブキーを押して入力補完したい。 Hoge が正規のため、 hoge では入力補完してくれない。

なので、大文字小文字無視の記述を追記する

$ vi ~/.inputrc

set completion-ignore-case on

これで大文字小文字無視の入力補完が可能になる

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

Docker の capability --cap-add 及び --cap-drop オプションについて調べた

メモ。
以下を読ませて頂きました

capablity について詳しい訳ではないため、認識が異なった部分などあればご指摘頂けますと助かります。

TL:DR

  • Linux には、root が持っている絶対的な権限を小分けにし、 細かくした権限をプロセスに与えられるようにする機構がある。その細かい権限のことを、ケーパビリティ(capablity)と呼ぶらしい ケーパビリティ で権限を少しだけ与える
  • Docker ではデフォルトでいくつかの capability は有効化されている。具体的有効化されているものは公式ドキュメントに記載ありで pscap コマンドでも確認出来る
  • --cap-drop オプションを指定することでデフォルトで有効化されている capability を無効化出来る
  • 逆に --cap-add オプションを指定することでデフォルトで無効化されている capability を有効化出来る
  • --privileged オプションを付与した場合、明示的に有効化されていない capability も利用でき、すべての capability が有効化されている
  • --user オプションを指定した場合、capablity が無効化(?)されていた(Root 以外は基本的に capablity がないためだと思われます)

環境

docker info
Containers: 59
 Running: 5
 Paused: 0
 Stopped: 54
Images: 27
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.14.77-80.57.amzn2.x86_64
Operating System: Amazon Linux 2
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 985.7MiB
Name: ip-172-31-30-50.ap-northeast-1.compute.internal
ID: M5OF:USUI:CHU4:NPLX:6TPC:DJ52:6C6O:DEHT:2BUM:WDHN:DSCO:HFHD
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

試す

--cap-drop

Runtime privilege and Linux capabilities

The following table lists the Linux capability options which are allowed by default and can be dropped.

と書いてあり、CHOWNはデフォルトでは許可されている。

$docker run -it ubuntu chown root:staff tmp

デフォルトで許可されている capability を無効化する場合 --cap-dropを指定する。

$docker run -it --cap-drop CHOWN ubuntu chown root:staff tmp
chown: changing ownership of 'tmp': Operation not permitted

capability は pscap で見れそうなので確認
Ubuntu の場合、apt-get install libcap-ng-utils で良さそう

libcap-ng-utils_0.7.7-3.1_amd64.deb

# デフォルト
$docker run -it ubuntu /bin/bash
#apt-get update
#apt-get install libcap-ng-utils
#pscap -a
ppid  pid   name        command           capabilities
0     1     root        bash              chown, dac_override, fowner, fsetid, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, audit_write, setfcap

# drop してみる
$docker run -it --cap-drop CHOWN ubuntu /bin/bash
#apt-get update
#apt-get install libcap-ng-utils
#pscap -a
ppid  pid   name        command           capabilities
0     1     root        bash              dac_override, fowner, fsetid, kill, setgid, setuid, setpcap, net_bind_service, net_raw, sys_chroot, mknod, audit_write, setfcap

確かに drop すると capability から CHOWN が無くなっていた。

ちなみに --privileged を付与するとどうなる?

$docker run -it --privileged --cap-drop CHOWN ubuntu chown root:staff tmp

成功してしまう
こちらも pscap で確認(細かいコマンドは除外)

# privilledge を付与すると capability full となり、すべて許可される
$docker run -it --privileged ubuntu /bin/bash 
# pscap -a
ppid  pid   name        command           capabilities
0     1     root        bash              full

# cap-drop しても full
$docker run -it --privileged --cap-drop CHOWN ubuntu /bin/bash
#pscap -a
ppid  pid   name        command           capabilities
0     1     root        bash              full

なるほど。

ちなみに --user オプションを変えるとどうなる?

$docker run --user nobody -it ubuntu whoami
nobody

# ユーザーのみ指定。権限がないのでエラー
$docker run --user nobody -it ubuntu chown root:staff tmp
chown: changing ownership of 'tmp': Operation not permitted

# priviledge をつけてもエラー
$docker run --privileged --user nobody -it ubuntu chown root:staff tmp
chown: changing ownership of 'tmp': Operation not permitted

capability も確認してみようと思ったが、入ってなかったのでさくっとイメージを作る。
(最初からこうすればよかった。。。)

FROM ubuntu
RUN apt-get update && apt-get install -y \
    libcap-ng-utils
$docker build -t pscap-ubuntu .

確認。

# 何も出ない
$docker run --user nobody -it pscap-ubuntu pscap -a

# 何も出ない 
$docker run --privileged  --user nobody -it pscap-ubuntu pscap -a

もしかすると root 以外は capablity はない?

ケーパビリティ で権限を少しだけ与える

root のプロセスは、基本的にはすべてのケーパビリティを持っていますが、 必要のないケーパビリティを外していくことで、 セキュリティを向上させることができます。
また、root でないプロセスは、基本的にはどのケーパビリティも持っていません。 ですが、実行するコマンドにケーパビリティが設定されている場合は、 そのケーパビリティを持つことができます。

なるほど。

--cap-add

以下を参考にさせて頂き検証。

(ヽ´ω`) < Dockerで--cap-addオプションを試す

デフォルトで許可されていない SYS_TIME を利用。

$docker run -it ubuntu date -s "2000/01/01 00:00:00"
date: cannot set date: Operation not permitted
Sat Jan  1 00:00:00 UTC 2000

想定通り NG。
許可してみる

$docker run -it --cap-add=SYS_TIME ubuntu date -s "2000/01/01 00:00:00"

エラーが無くなった。

--privileged を付与した場合も実行できてしまう

$docker run -it --privileged ubuntu date -s "2000/01/01 00:00:00"
Sat Jan  1 00:00:00 UTC 2000

これは先程の検証の通り、--priviledgeを付与することですべての capability が許可されるためだと思われる。

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