VairbleInspectorインストールメモ
jupyter labの拡張機能であるVariableInspectorをインストールする際にいくつか詰まった点
インストールのためのメモ
- インストールのための必要条件
- git拡張を外す
pip uninstall jupyterlab-git gitdb GitPython
-
- latex拡張を外す:自分の環境には入っていなかったが、そうらしい
- ver 3.0.7を使う:ver 3.0.9では
‘AppOptions’ object has no attribute ‘extensions’
が発生
jupyter labextension install @lckr/jupyterlab_variableinspector@3.0.7
その後
有効にして1~2週間ほど使ったが、何かが遅い。
df.shapes
とか、df.dtypes
しかしていないのに、数分固まることがある。
以前、Rカーネルと併用してはいけないという記事(RとvariableInspector混ぜるな危険 - R, Python, DB 備忘録)を書いたが、Pythonにおいてもオブジェクトを見に行っているんだろうな、だから遅いんだろうと思って無効にしてみたところ快適な挙動が復活。
結論
大きめ(100万行~)のデータを扱うなら、VariableInspectorは入れない方が良い。
Lubuntu 20.04 自宅サーバー構築メモ
全部きちんと書くと大変なので、とりあえずは自分用に殴り書き
少しずつ正確な手順に書き換えていきたい...
OSインストール
- 言語:English、タイムゾーン:東京
- 個人用のフォルダが「ダウンロード」等日本語名になるのがあまり好きではないため
初期準備
sudo apt update sudo apt upgrade sudo apt install gcc make ffmpeg
ファイアウォールの有効化
sudo ufw enable
日本語環境
sudo apt install fcitx-mozc
リモートデスクトップ(RDP)
- とりあえず面倒な設定をしなくても、WindowsやRemminaで繋げることができた。
- あ、でもポートは空けないとダメでした。
- それと、なぜかRDPするとシェルでpipenvにパスが通っていなかった。
- ポート番号はデフォルト値を記載
sudo apt install xrdp sudo ufw allow 3389
VPNサーバー(サーバー側)
- 適宜ドキュメント(7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト)を参照
解凍
tar xzvf softether-vpnserver-********.tar.gz
実行可能ファイルの生成
sudo make
VPN Server の配置
/usr/local/
以下にvpnserver
フォルダを移動する。- 以下、この場所にある前提での記載なので留意
vpncmd の check コマンドによる動作チェック
systemdへの登録
- ドキュメントでは、「vpncmd の check コマンドによる動作チェック」の次は「スタートアップスクリプトの登録」となっているが、systemdに登録したいので以下のようにする。
- サービス設定ファイルの作成
/etc/systemd/system/vpnserver.service
[Unit] Description=SoftEther VPN Server After=network.target [Service] Type=forking User=root ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop Restart=on-failure RestartSec=3s [Install] WantedBy=multi-user.target
- サービス登録
sudo systemctl enable vpnserver sudo systemctl start vpnserver
各種設定
- VPNサーバーの管理画面に入る
- 1~3の選択肢では1を選ぶ
cd /usr/local/vpnserver sudo ./vpncmd
サーバー管理者パスワードの設定
-
- 全部小文字でもOK(以下、本節で同様)
ServerPasswordSet
HUBを選択
-
- 新しく作ることもできるがDEFAULTでいいと思う。
Hub DEFAULT
グループ作成
-
- グループ名は何でもよい。自分はdefaultにした。
GroupCreate
IPsec / L2TP での通信を有効化
-
- 下記を参考に入力
- 事前共有キーは、vpnとかがよく紹介されていますけどどうなんですかね...
VPN Server/DEFAULT>IPsecEnable IPsecEnable command - Enable or Disable IPsec VPN Server Function Enable L2TP over IPsec Server Function (yes / no): yes Enable Raw L2TP Server Function (yes / no): no Enable EtherIP / L2TPv3 over IPsec Server Function (yes / no): no Pre Shared Key for IPsec (Recommended: 9 letters at maximum): ******** Default Virtual HUB in a case of omitting the HUB on the Username: DEFAULT The command completed successfully.
ポート開放
sudo ufw allow 500/udp sudo ufw allow 4500/udp
ネットワークストレージ
自動マウント
- LIVAは本体eMMCが32GBしかないので、USB HDDをつなげている。
- サーバーとしては自動マウントしてほしいので以下の手順で
- UUIDの確認
- sda2かもしれないので、適宜
- UUIDの確認
sudo blkid /dev/sda1
-
- fstabに書き込み
- ルートディレクトリにマウントする行を消してしまって全てやり直す羽目になったので注意して編集
- fstabに書き込み
sudo vi /etc/fstab
UUID=<確認したUUID> /mnt/abcdef<マウントポイント> ext4 defaults 0 1
smb
- Lubuntu⇔Windows, Chromebook間の共有用
- Sambaを使用するが、設定が複雑なので、WebminでGUI(ブラウザアプリ)から設定
smb用のユーザー作成
- ユーザー名もパスワードもLubuntuと同じで作成した。
sudo pdbedit -a (ユーザー名)
Webmin
- ダウンロードおよびインストール
echo "deb http://download.webmin.com/download/repository sarge contrib" | sudo tee /etc/apt/sources.list.d/webmin.list wget http://www.webmin.com/jcameron-key.asc -O - | sudo apt-key add - sudo apt update -y && sudo apt upgrade -y && sudo apt install -y webmin
- 共有の作成
- サーバー - Sambaファイル共有
- マウントポイントは先ほど
fstab
に記載したもの
- アクセス権限の編集
- 書き込み可能:見るだけならNoでもいいのかもしれない。
- ゲスト:基本は認証ありにしています。
- Sambaサービスの再起動
ポート開放
sudo ufw allow 137:138/udp sudo ufw allow 139/tcp sudo ufw allow 445/tcp # WindowsやiPhoneからアクセスするなら
クライアント側
- Windows
- エクスプローラでサーバのIPを入力すればいけるはず
- Linux
- PCManなどで下記パスを入力
smb://192.168.xxx.yyy
- Chromebook
- ファイル - 設定 - サービス - SMB共有の追加
AWS LambdaのLayer
Layerとして、Pythonパッケージを用意する場合のメモ
環境
Ubuntu 20.04 LTS
手順
- Layerに用意したいパッケージ群をpipでフォルダを指定してインストールします。(ただ、所定のフォルダにインストールしていないので、このままpythonを起動しても使えるわけではないし、既存のパッケージを上書きもしない)
pip install -t <格納するパス> <パッケージ名1> <パッケージ名2> ...
- 下記のフォルダ構成を作ります。(
beautifulsoup
の場合)
python/ |- beautifulsoup4-4.10.0.dist-info/ |- bs4/ |- soupsieve/ |- soupsieve-2.3.1.dist-info/
- 上記のフォルダ構成のままzip化します。
- Layerとしてアップロードします。
ffmpegは?
因みに、ffmpegはそこら中に記事が転がっているので割愛します。(例えば↓)
dev.classmethod.jp
ChromeRemoteDesktopを入れたらリアル端末の方からログインできなくなった。
現象
自宅のデスクトップPCにChromeRemoteDesktopをインストールして、iPhoneアプリのChromeRemoteDesktopを使ってリモートアクセスして以降、デスクトップPCでログインしても操作が一切効かない。
ただ、ログインがはじかれるというより、ログインはできているっぽい(私のはUbuntu 20.04なので、いつもの紫色のデスクトップ背景が見えている)が、操作が全くできない。
環境
- リモート先(デスクトップPC):Ubuntu 20.04
- Google Chrome:Version 98.0.4758.102 (Official Build) (64-bit)
- ChromeRemoteDesktop(
sudo apt install
したパッケージ):96.0.4664.9
- リモート元:iPhone (ChromeRemoteDesktopアプリ)
気づき
iPhoneのChromeRemoteDesktopアプリ(以下、「リモート(側)」)でログインし、同時にデスクトップPC(以下、「リアル(側)」)でもログイン(ただし、前述の通り操作は効かない)した状態で、リモート側でTerminal(Ctrl + Alt + t)を立ち上げてもTerminalが出てこないなと思ったら、なんとリアル端末側でTerminalが出てきたので、リモート側とリアル側でセッションが同一になってしまっているんだな、ということは直感的に感じたものの、リモート側を切断してもリモート側の画面がリアル側に戻ってきてくれない(自分でも何を書いているのかよくわからないが、知識が貧弱すぎてこれしか書きようがないです)ので、どうするんだこれ、という感じ。
検索ワードも見当がつかないまま、手当たりしだいにググっているうちに、下記の公式ヘルプに辿り着いた。(この中の、「ステップ3(省略可):仮想デスクトップ セッションをカスタマイズする」)
support.google.com
解決策
上記の公式ヘルプの中で、ホームディレクトリに.chrome-remote-desktop-session
を作れ、という下りがあるが、ll
した(リモートとリアルで同時にログインしてTerminalを立ち上げるとリアル側でTerminalが操作できる。キーボードもリアル側で叩く。)ところ、既に.chrome-remote-desktop-session
は存在して、記載内容は下記の通りだった。
exec /etc/X11/Xsession 'env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu'
なお、作成日時はChromeRemoteDesktopをインストールした時刻あたりだったので、インストールの際に作成されたのだろう。
公式ヘルプには
ヒント: デスクトップ環境によっては、一度に複数のセッションを実行できない場合があります。この場合は、Chrome リモート デスクトップのセッションとローカル セッションで別のデスクトップ環境を使用するか、セッション選択ツールを使用することをおすすめします。
ともある。この.chrome-remote-desktop-session
があるせいでリモート側とリアル側のセッションが一体化してしまったのではないかと、適当かつ素人的なことを考え、消した(実際には_bak
を付けてリネーム)ところリアル側でのログインが正常化した。
また、リモート側で改めてアクセスすると、下のスクリーンショットのように、セッション選択画面が表示されるようになった。(ちなみに、(default)
ではなくUbuntu
を選ばなければいけない)
注意事項(自分のための備忘録)
公式ヘルプのヒントにもあるとおり、リモート側とリアル側で同時にログインすると、セッションが一体化してしまうため、リモートとリアルを切り替える場合はきちんとログアウトする。
※恐らく、きちんと設定すれば、リモートとリアルでセッションを分けられるのだろうと思いつつ、必要性を感じていないため、現時点では先送り。
その後(ubuntu / lubuntu 22.04)
Lubuntu 22.04で同じくChrome Remote Desktopを入れたところ、そもそもからして「リモートアクセスの設定 不明なエラーが発生しました。」というエラーが出て、インストールができない。
この記事(Google Chromeリモートデスクトップの設定)を参考に、スクリプトを走らせてなんとかインストールはできたものの、やはり以前と同じ現象が発生。
同じように、.chrome-remote-desktop-session
を消したところ、リアル端末からのログインを完全に受け付けなくなってしまった(ログインしても何かはじかれてログイン画面に戻ってしまう)。
自分の中の勝手な結論として、少なくともUbuntu系ディストリビューションにはChrome Remote Desktopは向いていない。
Chrome Remote Desktopというのは、WindowsのHome版を使っていて、RDPが使えない場合の手段であって、リモート手段が豊富にあるLinuxでわざわざ使うことはなかろうと思うことにした。
結局、ChromebookからLubuntuへのデスクトップ環境への接続には、VNCを用いています。
下記の記事を参考にしました。ただ、「セキュアな接続」あたりは、真面目にやりませんでしたが。
www.digitalocean.com
クラウドの怖い話と権限管理
最近GIGAZINEでこんな記事を読みました。
gigazine.net
自分は個人利用だし、使っているサービスも非公開ばかりですので高を括っていたところはあるのですが、真剣に怖くなりましたね。
そして今更ながらググってまずはAWSの権限とかアラートとかを少しきちんとしてみました。
- 主にやったこと
- ルートユーザの2段階認証
- IAMユーザの2段階認証
- Cloud Trail
- 管理者権限があるユーザがログインしたときのslack/メール通知
- 予算アラート
※それにあたっては大いにこの記事を参考にさせてもらいました!
dev.classmethod.jp
これでAWSは一安心、GCP(Google Cloud Platform)もやろうと思ったのですが個人の場合、GCPの権限管理は非常にやりづらい。
それは言うまでもなく、GoogleにログインしているアカウントがGCPのオーナーにもなっているためです。言い換えると、GCPに入るためにGoogleにログインすると、自動的にrootになってしまっている感じですね。
一番怖いのがマイニングのためにVMインスタンスをバンバン立てられることなので、インスタンス作成時にslack通知が来るようにCloud functionsを作るだけはしておきましたが...
GCPをやっている人がGoogleアカウント乗っ取られると冒頭の記事みたいなこともあっさり起こるよねって思うと、Googleアカウント周りのセキュリティはかなり高めにキープしておかないと危険だなと感じた話でした。
※じゃあGCP使わずにAWS一本でいけばいいというアドバイスもあると思うのですが、GCPには「e2-micro VMインスタンス1個無料(ただしリージョン限定)」があって、これは本当に魅力的というかGoogle様様という無料枠で、このためにGCP始めたと言っても過言ではない。笑
rename tips(連番etc)
準備
rename
をインストールしていなければ導入
sudo apt install rename
使い方
基本的な使い方は
rename 置換する文字列 置換後の文字列 ファイル名1 ファイル名2 ...
ですが、これだと、拡張子を変更しようとすると怒られるし、使い勝手がよくない。
rename 's/置換する文字列/置換後の文字列' ファイル名(ワイルドカードOK)
または
rename 's/置換する正規表現/置換後の文字列(該当する文字列を$1として処理)/e' ファイル名(ワイルドカードOK)
とするほうが何かと便利ですね。
例1:拡張子の変更
rename 's/aaa/bbb' *.aaa
例2:連番のゼロ埋め(Zero padding)
file-1.txt, file-2.txt, …, file-999.txt
をfile-001.txt, file-002.txt, …, file-999.txt
とするようなケース
rename 's/(\d+)/sprintf("%03d", $1)/e'' *.txt
ファイル名からカッコ()を取り除く方法
rename -n 's/\(|\)//g' *
[]も取り除くなら
rename -n 's/\(|\[|\]|\)//g' *
- n をつけて実行前に確認しておくほうが安全