Open86

ぴよぴよUbuntu20.04(ローカル環境構築)

Yuuki TakahashiYuuki Takahashi

このノートPCで優勝していくわね🐍

https://thehikaku.net/pc/dospara/19galleria-gcr1650gf.html

スペック

  • 筐体
    • ドスパラ GALLERIA GCR1650GF7
  • CPU
    • Intel® Core™ i7-9750H CPU @ 2.60GHz × 12
  • メモリ
    • 32GB
  • グラボ
    • NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] / Intel Corporation UHD Graphics 630 (Mobile)
  • ストレージ
    • SSD 512GB

周辺機器

追加投資

  • 背面にHDMIとUSB typeCポート * 1があるため、ケーブル刺すと壁に近づけづらい
  • その他、左にLAN/USB typeA * 1/マイク/イヤホン、右にUSB typeA * 2がある
    • USB typeCポートは、PD給電には対応していないっぽい
    • Display Port over USB Type-C(DP Alt Mode)についてもできなかったが、これはUbuntuのドライバの問題?(未調査)

PyCharm(もといJetBrains各種製品)関連の話はこちらに書く
https://zenn.dev/yktakaha4/scraps/8ac5ae1f06d696

Yuuki TakahashiYuuki Takahashi

Macbookでブートディスクを作る方法

# USBの初期化
$ diskutil list
$ diskutil eraseDisk MS-DOS UBUNTU20_04 /dev/disk3
$ diskutil unmountDisk /dev/disk3

# ブートディスク作成
# rdiskとbsについて
# https://qiita.com/sira/items/0e7cc588276b8bec35ac
$ diskutil list
$ ll ./Desktop/ubuntu-20.04.1-desktop-amd64.iso /dev/rdisk3
$ sudo dd if=./Desktop/ubuntu-20.04.1-desktop-amd64.iso of=/dev/rdisk3 bs=256m

Password:
10+1 records in
10+1 records out
2785017856 bytes transferred in 775.116650 secs (3593031 bytes/sec)

# こんなのもあった
https://www.balena.io/etcher/

いろいろやっていく

# 基礎知識&初期設定
# 8. から12.
# 40.
https://sicklylife.jp/ubuntu/2004/settings.html

# 追加のドライバインストール
# ソフトウェアとアップデート > 追加のドライバー > プロプライエタリ、検証済み のドライバを選択
# 特に外付けディスプレイについては、追加のドライバでないとまともに表示できなかった

# fishのインストール
https://launchpad.net/~fish-shell/+archive/ubuntu/release-3

# テーマはfisherでpureを入れた
https://github.com/jorgebucaran/fisher

$ fisher install rafaelrinaldi/pure

# aws-cli / direnv / pyenv /nodenv / tfenvインストール
# 基本的にそれぞれのリポジトリの公式手順でok
# pyenvは、pythonのインストールに際して以下が必要だった
$ sudo apt-get install libsqlite3-dev libbz2-dev libssl-dev libreadline-dev zlib1g-dev

pyenvのインストール時に必要なもの
https://github.com/pyenv/pyenv/wiki/common-build-problems

Yuuki TakahashiYuuki Takahashi

nkf / jqはデフォで入ってないので入れた
vimはデフォで入ってるのは軽量版らしくシンタックスハイライト等効かないので追加でいれる

sudo apt-get install jq nkf vim

pbcopy / pbpaste再現

$ sudo apt-get install xclip

# 以下aliasを設定
alias pbcopy='xclip -selection c'
alias pbpaste='xclip -selection c -o'

PCがJISキーボード & 必要に応じて外付けキーボードにUSを使いたい...というケースで役に立つ設定

# 入力ソースは日本語(Mozc) だけで十分

# 右Windows(キーコード134)で全角/半角切り替えをしたかったので、以下ファイルを作った
# キーコードは xev コマンドで確認可能
$ cat ~/.xmodmap
keycode 134 = Zenkaku_Hankaku

# 以下ファイルを作った
$ ~/.config/fish/conf.d/keylayout.fish
#!/usr/bin/env fish

function setjis
  setxkbmap -rules evdev -model jp106 -layout jp
  xmodmap "$HOME/.xmodmap"
  echo jis > "$HOME/.keylayout"
end

function setus
  setxkbmap -rules evdev -model us -layout us
  xmodmap "$HOME/.xmodmap"
  echo us > "$HOME/.keylayout"
end


if [ -f "$HOME/.keylayout" ]
  if [ (cat "$HOME/.keylayout") = "us" ]
    setus
  else 
    setjis
  end
end

キーマップは以下
https://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap

Yuuki TakahashiYuuki Takahashi
# バックアップを取る
https://github.com/teejee2008/timeshift

# /home配下の暗号化
https://www.howtogeek.com/116032/how-to-encrypt-your-home-folder-after-installing-ubuntu/

# shutterのインストール
https://symfoware.blog.fc2.com/blog-entry-2444.html

ショートカット設定は以下
http://moebuntu.blog48.fc2.com/blog-entry-819.html
Yuuki TakahashiYuuki Takahashi

trackpadが再接続となった時にポインタのスピードがリセットされるようなので、ターミナル立ち上げ時に適当に設定する

$ cat ~/.config/fish/conf.d/pointer.fish
#!/usr/bin/env fish

set -l DEVICE_NAME "Apple Inc. Magic Trackpad 2"

xinput --list-props "$DEVICE_NAME" > /dev/null 2>&1
if [ $status -eq 0 ]
  xinput --set-prop "$DEVICE_NAME" "libinput Accel Speed" 0.75
end

デフォの設定はこれでできるっぽい?
https://blog.hanhans.net/2019/03/03/ubuntu-magictrackpad2/

Yuuki TakahashiYuuki Takahashi

Windowロックして復帰後、ディスプレイが表示されない場合があった
以下関数で再接続
うまく再表示できない場合もある...その場合は要reboot?

$ cat .config/fish/conf.d/hdmi.fish
#!/usr/bin/env fish

function conhdmi
  if [ (printenv DISPLAY) != "" ]
    xset dpms force off
    xset dpms force on
  end

  xrandr \
    --output eDP-1-1 --mode 1920x1080 --pos 0x1080 --rate 59.98 \
    --output HDMI-0 --mode 3840x2160 --pos 1920x0 --rate 60.00
end

function disconhdmi
  xrandr \
    --output eDP-1-1 --mode 1920x1080 --pos 0x0 --rate 59.98 \
    --output HDMI-0 --off
end
Yuuki TakahashiYuuki Takahashi
# 関数はfunctions/配下に分けて格納するのがいいっぽい?
https://www.gfd-dennou.org/member/hiroki/homepage/main008.html
Yuuki TakahashiYuuki Takahashi

プリンタドライバのインストール(brother)
https://support.brother.co.jp/j/b/faqend.aspx?c=jp&lang=ja&prod=dcpj4225n&faqid=faq00100681_000

$ gunzip linux-brjprinter-installer-2.2.2-1.gz
$ chmod 0755 linux-brjprinter-installer-2.2.2-1
$ sudo  ./linux-brjprinter-installer-2.2.2-1 HL-2270DW

ココらへんはenter連打でいけた

Device URIを指定しますか? [Y/n] ->


0: cups-brf:/
1: socket
2: ipps
3: beh
4: lpd
5: ipp
6: http
7: https
8: serial:/dev/ttyS4?baud=115200
9: hp
10: hpfax
11: dnssd://Brother%20HL-2270DW%20series._pdl-datastream._tcp.local/
12 (I): IPアドレスの指定
13 (A): 自動設定 (dnssd://Brother%20HL-2270DW%20series._pdl-datastream._tcp.local/)

使用するDevice URIの番号を選択してください。 ->

lpadmin -p HL2270DW -v dnssd://Brother%20HL-2270DW%20series._pdl-datastream._tcp.local/ -E
テスト印刷を実行しますか? [y/N] ->
Yuuki TakahashiYuuki Takahashi

タッチパッドの中央ボタンで貼り付けが行われるのが鬱陶しいので、左ボタンに紐づける

https://wiki.archlinux.jp/index.php/Libinput#.E3.83.9C.E3.82.BF.E3.83.B3.E3.81.AE.E5.86.8D.E3.83.9E.E3.83.83.E3.83.94.E3.83.B3.E3.82.B0

# 予めタッチパッドの中央ボタンの番号を確認しておく(2だった)
$ xev

$ xinput list | grep -i touchpad
⎜   ↳ UNIW0001:00 093A:1336 Touchpad          	id=13	[slave  pointer  (2)]

$ xinput get-button-map 13
1 2 3 4 5 6 7 

$ xinput set-button-map 13 1 1 3 4 5 6 7

# 例によって設定処理を自作
$ cat .config/fish/conf.d/touchpad.fish 
#!/usr/bin/env fish

set DEVICE_NAME 'UNIW0001:00 093A:1336 Touchpad'

set DEVICE_ID (xinput list --id-only "$DEVICE_NAME" 2>/dev/null)
if [ "$DEVICE_ID" != "" ]
  xinput set-button-map "$DEVICE_ID" 1 1 3 4 5 6 7
end
Yuuki TakahashiYuuki Takahashi

aws systems manager session managerのインストール
https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-debian

$ cat ~/.ssh/config
# SSH over Session Manager
host i-* mi-*
  ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  ServerAliveInterval 60
  ServerAliveCountMax 5

# 例えばこんな処理を書いておく
$ cat conn_rds.bash 
#!/usr/bin/env bash

pkill -f '55432:'
AWS_PROFILE=xxx ssh -i ~/.ssh/yyy.pem ec2-user@i-zzzzz -fNL 55432:abc.def.ap-northeast-1.rds.amazonaws.com:5432
Yuuki TakahashiYuuki Takahashi

旧macから.envrcを持っていく

$ find . -name .envrc | sort | xargs tar -zcvf envrc.tgz

$ tar -tvf envrc.tgz| head -3
-rw-r--r--  0 tkhs   staff      98  9 23  2019 ./cloudwatch-dashboard-report/.envrc
-rw-r--r--  0 tkhs   staff     162  8 16 13:57 ./eb-learning/.envrc
-rw-r--r--  0 tkhs   staff     157  6 15  2019 ./intellij/terraform-tameshi/.envrc
Yuuki TakahashiYuuki Takahashi

dockerインストール

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

# 構成はarchコマンドで確認
$ arch

$ apt-cache madison docker-ce | awk '{print $3}' | head -1
5:20.10.1~3-0~ubuntu-focal

$ sudo apt-get install docker-ce=5:20.10.1~3-0~ubuntu-focal docker-ce-cli=5:20.10.1~3-0~ubuntu-focal containerd.io

docker利用時にsudoを使わなくて済むように、ユーザをdockerグループに所属させる
$ docker version でエラーがでなくなったらok

https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/linux-postinstall/

https://motomichi-works.hatenablog.com/entry/2019/07/19/200154

資格情報の管理方法を↓にできるとよさそう?
https://solareenlo.com/posts/docker-pass/

上記手順を実施の後、docker loginにてconfig.jsonが以下のようになればok

$ cat ~/.docker/config.json
# 従来(平文)
{
	"auths": {
		"xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com": {
			"auth": "xxxxxxxx"
		}
	}
}


# 対応後
{
	"auths": {
		"xxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com": {}
	},
	"credsStore": "pass"
}
Yuuki TakahashiYuuki Takahashi

.gitconfigにエイリアスをつけた

$ cat ~/.gitconfig 
[user]
	email = 000+xxx@users.noreply.github.com
	name = xxx yyy
[alias]
	ignore = "!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi"
        a = "add ."
        co = "commit -m"
        ch = "checkout"
        chb = "checkout -b"
        chm = "checkout master"
        chd = "!gchd() { git checkout \"$(git remote show origin | grep 'HEAD branch' | awk '{print $NF}')\"; }; gchd"
        cfg = "config --list"
        d = "diff"
        ds = "diff --staged"
        s = "status -s"
        l = "log --oneline --graph --decorate"
        ps = "push origin HEAD"
        pl = "pull origin HEAD"

Yuuki TakahashiYuuki Takahashi

google chromeがメモリを食いすぎてPCをクラッシュさせているように思えたため、以下書き換えて様子見

$ diff /usr/share/applications/google-chrome.desktop ./work/google-chrome.desktop
108c108
< Exec=/usr/bin/google-chrome-stable --renderer-process-limit=1 %U
---
> Exec=/usr/bin/google-chrome-stable %U
169c169
< Exec=/usr/bin/google-chrome-stable --renderer-process-limit=1
---
> Exec=/usr/bin/google-chrome-stable
221c221
< Exec=/usr/bin/google-chrome-stable --incognito --renderer-process-limit=1
---
> Exec=/usr/bin/google-chrome-stable --incognito

参考

http://fygar.blog.fc2.com/blog-entry-174.html


(2021/2/6) フリーズするようになった気もする

Yuuki TakahashiYuuki Takahashi

暗号化ディレクトリ配下で、長いファイル名/ディレクトリ名が作成できない場合があったため、
特定ファイル/ディレクトリをhome外に逃がすスクリプトを作成

mountコマンドに失敗する場合もあった

$ cat encrypt.fish 
#!/usr/bin/env fish

set base_dir "/home/tkhs_unencrypted"

function encrypt
  for src in $argv
    if test ! -L "$src"
      echo "invalid: $src" 1>&2
      return 1
    elseif ! (readlink "$src") == "$base_dir"
      echo "invalid: $src" 1>&2
      return 1
    end
  end

  for src in $argv
    set dest (readlink "$src")
    unlink "$src"
    mv "$dest" "$src"
  end
end

function decrypt
  for src in $argv
    if test -L "$src"
      echo "invalid: $src" 1>&2
      return 1
    elseif ! -f "$src" -a ! -d "$src"
      echo "invalid: $src" 1>&2
      return 1
    end
  end

  for src in $argv
    set dest "$base_dir/"(basename "$src" | tr -d '/')"_"(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w6 | head -1)
    mv "$src" "$dest"
    ln -s "$dest" (echo "$src" | sed 's/\/*$//')
  end
end
Yuuki TakahashiYuuki Takahashi

clamscanが1時間に1回アップデートされてしんどいので変更

# 以下を編集
$ cat /etc/clamav/freshclam.conf | grep -i check
# Check for new database 24 times a day
Checks 24

# 再起動
$ sudo systemctl restart clamav-freshclam.service
Yuuki TakahashiYuuki Takahashi

外付けディスプレイについてEV2485 & EV2495を接続しているが、
miniDP -> DPケーブルで接続するようにしたら起動時にディスプレイを認識してくれるようになった
(HDMIでやってた時は都度切れてた...)

Yuuki TakahashiYuuki Takahashi

apt updateでエラー

ヒット:21 http://ppa.launchpad.net/teejee2008/timeshift/ubuntu focal InRelease              
パッケージリストを読み込んでいます... 完了
E: https://dl.bintray.com/getinsomnia/Insomnia/InRelease の取得に失敗しました  403  Forbidden [IP: 34.213.218.48 443]
E: リポジトリ https://dl.bintray.com/getinsomnia/Insomnia  InRelease はもう署名されていません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

解決法

Yuuki TakahashiYuuki Takahashi

Time Cupsuleを共有ディスクとして使う

https://moonstruckdrops.github.io/blog/2013/11/29/timecapsule-mac-linux/

https://askubuntu.com/questions/1094087/how-to-access-apple-time-capsule-on-ubuntu-18-04-1

# このコマンドでできた
$ sudo mount -t cifs //192.168.0.2/Data/ -o username=xxx,password=yyy,uid=1001,gid=1001,file_mode=0755,dir_mode=0755,sec=ntlm,vers=1.0 /media/timecupsule

https://lukesilvia.hatenablog.com/entry/20080716/p1

/etc/rc.local は実行権限をつけること

Yuuki TakahashiYuuki Takahashi

ディスクがいっぱいの時に、そのディレクトリ直下で専有している内容を探す

sudo du -xhs ./*
Yuuki TakahashiYuuki Takahashi

kubergruntをいれる
https://github.com/gruntwork-io/kubergrunt/releases

$ wget https://github.com/gruntwork-io/kubergrunt/releases/download/v0.7.10/kubergrunt_linux_amd64 -O ~/.local/bin/kubegrunt
--2021-10-25 15:19:34--  https://github.com/gruntwork-io/kubergrunt/releases/download/v0.7.10/kubergrunt_linux_amd64
github.com (github.com) をDNSに問いあわせています... 52.69.186.44
github.com (github.com)|52.69.186.44|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://github-releases.githubusercontent.com/165462385/5c7b14dc-fd1a-4686-9034-03e1aaa4c7d3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211025%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=202115T061935Z&X-Amz-Expires=300&X-Amz-Signature=79ec91f5a220e1b814e49b699bab322d059e74cf44613ce782c7b82711dd4460&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=165462385&response-content-disposition=attachment%3B%20filename%3Dkubergrunt_linux_amd64&response-content-type=application%2Foctet-stream [続く]
--2021-10-25 15:19:35--  https://github-releases.githubusercontent.com/165462385/5c7b14dc-fd1a-4686-9034-03e1aaa4c7d3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211025%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211025T061935Z&X-Amz-Expires=300&X-Amz-Signature=79ec91f5a220e1b814e49b699bab322d059e74cf44613ce782c7b82711dd4460&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=165462385&response-content-disposition=attachment%3B%20filename%3Dkubergrunt_linux_amd64&response-content-type=application%2Foctet-stream
github-releases.githubusercontent.com (github-releases.githubusercontent.com) をDNSに問いあわせています... 185.199.110.154, 185.199.111.154, 185.199.108.154, ...
github-releases.githubusercontent.com (github-releases.githubusercontent.com)|185.199.110.154|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 47170700 (45M) [application/octet-stream]
`/home/tkhs/.local/bin/kubegrunt' に保存中

/home/tkhs/.local/bin/kubegrunt                           100%[==================================================================================================================================>]  44.99M  13.8MB/s    in 3.4s    

2021-10-25 15:19:39 (13.3 MB/s) - `/home/tkhs/.local/bin/kubegrunt' へ保存完了 [47170700/47170700]

                                                                                                                                                                                                                                     
~/lapras/repos/lapras-inc/terraform-aws/clusters/external/stg/ap-northeast-1 ⎈:A:default 0/test/more-disk-sizes 4.2s 15:19:39
$ which kubegrunt                                                                                                           
kubegrunt not found
                                                                                                                                                                                                                                     
~/lapras/repos/lapras-inc/terraform-aws/clusters/external/stg/ap-northeast-1 ⎈:A:default 0/test/more-disk-sizes (1) .1s 15:19:44
$ ls -l ~/.local/bin/kubegrunt    
-rw-rw-r-- 1 tkhs tkhs 47170700 10月  6 23:06 /home/tkhs/.local/bin/kubergrunt
                                                                                                                                                                                                                                     
~/lapras/repos/lapras-inc/terraform-aws/clusters/external/stg/ap-northeast-1 ⎈:A:default 0/test/more-disk-sizes 0s 15:19:58
$ chmod 0755 ~/.local/bin/kubergrunt
Yuuki TakahashiYuuki Takahashi

どうしても特定のインターフェースのIPアドレスを上書きしたく、以下で解決した

https://askubuntu.com/questions/1265262/systemd-resolvectl-drop-in-files-for-dns

/etc/NetworkManager/dispatcher.d/10-revert-enx00000000
#!/bin/bash -e

TARGET_DEVICE_IFACE="enx00000000"

echo "Receive event from ${DEVICE_IFACE:-dummy} ${NM_DISPATCHER_ACTION:-dummy} " >> /tmp/dispatch.log
[[ "${DEVICE_IFACE:-dummy}" = "$TARGET_DEVICE_IFACE" ]] && [[ "${NM_DISPATCHER_ACTION:-dummy}" = "up" ]] && {
        resolvectl revert "$TARGET_DEVICE_IFACE"
        resolvectl llmnr "$TARGET_DEVICE_IFACE" "off"
        echo "revert."
}>> /tmp/dispatch.log

親の設定は以下で変える

sudo vim /etc/systemd/resolved.conf
Yuuki TakahashiYuuki Takahashi

以下を消した

sudo add-apt-repository -r ppa:gnome3-team/gnome3
sudo add-apt-repository -r ppa:webupd8team/gnome3
sudo apt update