- 投稿日:2019-08-22T22:37:05+09:00
デュアルブートで環境を吹っ飛ばしがちな人のためのメモ(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/efi4. 次のコマンドを実行
- やっている事的には、内容的には生きているディスクをマウントして、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-grubNVMe形式のディスク
ディスク番号で悩んで、途方に暮れてた経験があったので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終わりに
新しいピンチに出会ったらまた追記します。
参考文献
- 投稿日:2019-08-22T21:40:49+09:00
【金沢工大】 LinuxからVPNを使う方法 bashでコマンド一発でログイン
金沢工業大学のVPNにLinuxから繋ぐ方法 bashでコマンド一発でログイン
GitHubにこんなソースコードが有ります。openfortivpnというらしいです。
https://github.com/adrienverge/openfortivpnopenfortivpnリポジトリは、ホームディレクトリ(つまり /home/username/)に配置してください。配置した後のパスは、/home/username/openfortivpn/のようになります。
次に、expectというパッケージをapt-getでインストールします。
sudo apt-get install expectopenfortivpnは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終わり。
- 投稿日:2019-08-22T20:06:43+09:00
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... ```
- 投稿日:2019-08-22T20:06:43+09:00
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... ```
もう一度Ubuntuを立ち上げる
PWを入力エンター
PWを入力エンター
原因
- 目的にもすでに書いてあるが今回のエラーの原因は、WSLを有効にせずにMicrosoft storeでUbuntuをインストールしてしまったことだった。
- 投稿日:2019-08-22T18:35:03+09:00
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/activate2.1. ダウンロード
- 投稿日:2019-08-22T18:35:03+09:00
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/activate2.1. ダウンロード
- 投稿日:2019-08-22T16:32:45+09:00
Linuxのタブキーの入力補完で大文字小文字を無視する
- 投稿日:2019-08-22T08:05:18+09:00
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 permittedcapability は
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 permittedcapability も確認してみようと思ったが、入ってなかったのでさくっとイメージを作る。
(最初からこうすればよかった。。。)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 が許可されるためだと思われる。








