20220228のLinuxに関する記事は5件です。

GDBのエラーの原因

はじめて学ぶバイナリ解析の本を読んでいたら というエラー文がでたので chmod 777 stack_5-1.outを読み込んだら直りました~ Permission errorのほうの記事はあったのですがこのエラーはなかったので 記事書いてみました よく見たら結構初歩的でしたが、誰かの役に立ったらうれしいです
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

スペースがある文字列を変数にする場合 シェルスクリプト

スペースのある変数をそのままシェルスクリプトのif文等で使うと文法エラーになる。 「 [: too many arguments」みたいに。 以下のサイトを参考に https://ritchiekotzen.hatenablog.com/entry/20090430 if文で使用するとき回避方法は2つある。 1.変数自体をダブルコーテーションで囲む。   "$STATUS" 2.if文のカッコを2重カッコにする [[ (Ended immediately) = (\R\u\n\n\i\n\g) ]] なんでif文の中で2重カッコにしているのか不明だったが そういうことってわかった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでVRChat(with Proton)のワールド起動リンクを動かす

2022/03/04追記 : どうやらこの方法だと、インスタンスIDが入ってないリンクでフリーズするみたいです。 対処方法ご存知の方いましたら教えてください... はじめに SteamでVRChatをインストールすると、普通なら上みたいなページのLAUNCH WORLDをクリックするだけで該当のワールドに飛べるようになるはずなんですが、Linuxだとそこらへんの設定が自動で行われないようなのでざっくりその方法を書いておきます。 ちなみに、当方Arch Linuxでやってるので、Ubuntuとかだとまたやり方が違うかもしれないのでご承知おきください。 超絶ざっくり説明でわかる人向け このLAUNCH WORLDリンクはvrchat://のURLスキームが入ってるので、要はvrchat://のURLスキームが開かれたらProton経由でVRChatを開くようにxdg-mimeとかで設定してやればおk。 やり方 1. VRChatとProtonのインストール先を確認する SteamからVRChat並びにProton X.X(Xはバージョン番号)を右クリックして、Propertiesを開いてLOCAL FILESタブを開くと、Browseってボタンがあるので、それをクリックすると既定のファイルマネージャーがインストール先を開いてくれます。 デフォルトのインストール先のままなら /home/[ユーザー名]/.local/share/Steam/steamapps/common/VRChat/ と /home/[ユーザー名]/.local/share/Steam/steamapps/common/Proton X.X/ のはず ちなみに、AURからProtonをインストールしている場合は、 /usr/share/steam/compatibilitytools.d/proton/ にProtonがインストールされてます。 2. VRChatのCOMPAT_DATA_PATHを探す。 基本的には [VRChatがインストールされてるSteamライブラリフォルダ]/steamapps/compatdata/[ゲームID(VRChatの場合438100)] にあります。 デフォルトなら /home/[ユーザー名]/.local/share/Steam/steamapps/compatdata/438100/ になってるはず。 3. デスクトップエントリを作成する。 ~/.local/share/applications/ または /usr/share/applications/ 下にデスクトップエントリを作成します。 名前はvrchat.desktopとかが良いと思います。 $ vim ~/.local/share/applications/vrchat.desktop して、以下のように記述します。 ([ユーザー名]や[VRChatのcompatdata]等は適宜書き換え) Execの--no-vrオプションはVRモードで起動させたい場合は省略してください。 vrchat.desltop Type=Application Version=1.0 # 多分なくても良い Name=VRChat Comment=VR Communication software # 多分なくても良い Path=[VRChatのインストール先ディレクトリ] Exec=env STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/[ユーザー名]/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=[VRChatのcompatdata] [protonのインストール先ディレクトリ]/proton run VRChat.exe --no-vr %u Icon=[アイコンのパス] # アイコン用意するの面倒ならなくても良い Categories=Game; # アプリケーションメニューでカテゴリ分けされなくても良いならなくても良い MimeType=x-scheme-handler/vrchat; 私の場合はこんな感じになりました vrchat.desltop Type=Application Version=1.0 Name=VRChat Comment=VR Communication software Path=/home/ytjvdcm/.local/share/Steam/steamapps/common/VRChat Exec=env STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/ytjvdcm/.local/share/Steam/ STEAM_COMPAT_DATA_PATH=/home/ytjvdcm/.local/share/Steam/steamapps/compatdata/438100/ /usr/share/steam/compatibilitytools.d/proton/proton run VRChat.exe --no-vr %u Icon=/home/ytjvdcm/Pictures/vrc.png Categories=Game; MimeType=x-scheme-handler/vrchat; 正常に登録できていれば、各DEのアプリケーションメニューとかにVRChatが増えてるはずです。 4. URLスキームを登録 以下のコマンドでURLスキームを登録します。 $ xdg-mime default vrchat.desktop x-scheme-handler/vrchat 5. 起動する。 適当なブラウザでLAUNCH WORLDしてみましょう。 こんなのが出てきたら、プログラムを選択(A)を選んで こんなのが出てきたら、VRChatを選んでリンクを開く(O)を押して VRChatが起動して 注 : ここでウィンドウサイズがデフォルトに戻ってたり、さっきまでログインしていたのに何故かログイン画面に飛ばされたりしてたら、多分compatdataのパス指定が間違ってます。 無事ワールドに入れたら成功です。 お疲れ様でした。 参考文献 デスクトップエントリ - ArchWiki xdg-utils - ArchWiki Desktop Entry Specification
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

フォルダを個別にzipする

cd ターゲットdir find . \! -name '*.zip' -type d -exec zip -r {}.zip {} \; mkdir _zip && mv *.zip _zip/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi4 NFSが繋がらない時の確認ポイント

前文 毎回トラブルが発生する度に、どのコマンドで何を確認するんだっけ? と右往左往するので備忘録として手順を残す。 動作確認環境 NFSサーバ Raspberry Pi2B pi@raspberrypi2:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.13 (stretch) Release: 9.13 Codename: stretch pi@raspberrypi2:~ $ uname -a Linux raspberrypi2 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux pi@raspberrypi2:~ $ NFS共有ディレクトリ(USB-HDD)。 pi@raspberrypi2:~ $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 (中略) /dev/sdc2 7.3T 5.5T 1.9T 75% /media/pi/****03 /dev/sdb2 7.3T 3.3T 4.1T 45% /media/pi/****02 /dev/sda2 7.3T 2.1T 5.3T 29% /media/pi/****01 /dev/sdd2 7.3T 2.9T 4.5T 39% /media/pi/****04 pi@raspberrypi2:~ $ NFSクライアント Raspberry Pi4B pi@raspberrypi4:~ $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 11 (bullseye) Release: 11 Codename: bullseye pi@raspberrypi4:~ $ uname -a Linux raspberrypi4 5.10.92-v8+ #1514 SMP PREEMPT Mon Jan 17 17:39:38 GMT 2022 aarch64 GNU/Linux pi@raspberrypi4:~ $ マウントポイント。 pi@raspberrypi4:~ $ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 (中略) 192.168.11.101:/media/pi/****01 7.3T 2.1T 5.3T 29% /mnt/nfs/****01 192.168.11.101:/media/pi/****02 7.3T 3.3T 4.1T 45% /mnt/nfs/****02 192.168.11.101:/media/pi/****03 7.3T 5.5T 1.9T 75% /mnt/nfs/****03 192.168.11.101:/media/pi/****04 7.3T 2.9T 4.5T 39% /mnt/nfs/****04 pi@raspberrypi4:~ $ Raspberry Pi2b に USB-HDD を接続し NFS で共有、NAS化。それを他の Pi から NFS接続している。 サーバ側確認ポイント 1. サービス確認 sudo systemctl status nfs-kernel-serverでサービスの状態を確認。正常なら以下。 pi@raspberrypi2:~ $ sudo systemctl status nfs-kernel-server ● nfs-server.service - NFS server and services Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled) Active: active (exited) since Sun 2022-02-27 09:19:13 JST; 36min ago Process: 10097 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS) Process: 10094 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS) Process: 10091 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS) Process: 10115 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 10112 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 10115 (code=exited, status=0/SUCCESS) 2月 27 09:19:13 raspberrypi2 systemd[1]: Starting NFS server and services... 2月 27 09:19:13 raspberrypi2 systemd[1]: Started NFS server and services. pi@raspberrypi2:~ $ 停止している場合は、sudo systemctl start nfs-kernel-serverで開始、エラーが発生している場合はsudo systemctl restart nfs-kernel-serverでサービス再起動。 再度状態確認。改善されない場合は Pi を再起動。それでも改善されない場合は以下の設定確認。 2. エクスポート確認 sudo exportfsまたはshowmount -eでエクスポートの確認。正常なら以下。 pi@raspberrypi2:~ $ sudo exportfs /media/pi/****01 192.168.11.0/24 /media/pi/****02 192.168.11.0/24 /media/pi/****03 192.168.11.0/24 /media/pi/****04 192.168.11.0/24 pi@raspberrypi2:~ $ pi@raspberrypi2:~ $ showmount -e Export list for raspberrypi2: /media/pi/****04 192.168.11.0/24 /media/pi/****03 192.168.11.0/24 /media/pi/****02 192.168.11.0/24 /media/pi/****01 192.168.11.0/24 pi@raspberrypi2:~ $ showmount -aなら接続しているクライアントも表示。 pi@raspberrypi2:~ $ showmount -a All mount points on raspberrypi2: 192.168.11.110:/media/pi/****05 192.168.11.110:/media/pi/****03 192.168.11.110:/media/pi/****04 192.168.11.113:/media/pi/****05 192.168.11.113:/media/pi/****01 192.168.11.113:/media/pi/****02 192.168.11.113:/media/pi/****03 192.168.11.113:/media/pi/****04 192.168.11.116:/media/pi/****05 192.168.11.116:/media/pi/****01 192.168.11.116:/media/pi/****03 192.168.11.116:/media/pi/****04 192.168.11.9:/media/pi/****05 192.168.11.9:/media/pi/****03 pi@raspberrypi2:~ $ あれれ? 過去に接続したクライアントや過去に共有していたディレクトリの情報まで表示されている。 ゴミが残ることがあるらしい。気持ち悪い。これってどこかに情報が記録されているってことだよね。どこだろう。ぐぐっても中々情報が見つからなかったが、やっと以下に辿り着いた。 showmountで過去にマウントされた情報が残る ふむふむ。/var/lib/nfs/rmtabを確認。確かにこれだね。 pi@raspberrypi2:~ $ cat /var/lib/nfs/rmtab 192.168.11.116:/media/pi/****01:0x0000000d 192.168.11.116:/media/pi/****05:0x00000015 192.168.11.9:/media/pi/****05:0x00000001 192.168.11.9:/media/pi/****03:0x00000029 192.168.11.110:/media/pi/****03:0x00000003 192.168.11.110:/media/pi/****05:0x00000001 192.168.11.113:/media/pi/****05:0x00000001 192.168.11.113:/media/pi/****03:0x00000007 192.168.11.113:/media/pi/****01:0x00000007 192.168.11.116:/media/pi/****03:0x00000009 192.168.11.116:/media/pi/****04:0x0000001c 192.168.11.110:/media/pi/****04:0x00000032 192.168.11.113:/media/pi/****02:0x00000006 192.168.11.113:/media/pi/****04:0x0000000f pi@raspberrypi2:~ $ 上記サイトにあるように、クライアント側を全てシャットダウン後、以下実行。クリアされた模様。 pi@raspberrypi2:~ $ showmount -a All mount points on raspberrypi2: 192.168.11.110:/media/pi/****05 192.168.11.110:/media/pi/****03 192.168.11.110:/media/pi/****04 192.168.11.113:/media/pi/****05 192.168.11.113:/media/pi/****01 192.168.11.113:/media/pi/****02 192.168.11.113:/media/pi/****03 192.168.11.113:/media/pi/****04 192.168.11.116:/media/pi/****05 192.168.11.116:/media/pi/****01 192.168.11.116:/media/pi/****03 192.168.11.116:/media/pi/****04 192.168.11.9:/media/pi/****05 192.168.11.9:/media/pi/****03 pi@raspberrypi2:~ $ sudo cp /dev/null /var/lib/nfs/rmtab <-- クライアント側を全てシャットダウン後に実行 pi@raspberrypi2:~ $ showmount -a All mount points on raspberrypi2: pi@raspberrypi2:~ $ クライアント側起動後に再度確認。スッキリ。 pi@raspberrypi2:~ $ showmount -a All mount points on raspberrypi2: 192.168.11.110:/media/pi/****03 192.168.11.110:/media/pi/****04 192.168.11.113:/media/pi/****01 192.168.11.113:/media/pi/****02 192.168.11.113:/media/pi/****03 192.168.11.113:/media/pi/****04 192.168.11.116:/media/pi/****01 192.168.11.116:/media/pi/****03 192.168.11.116:/media/pi/****04 pi@raspberrypi2:~ $ 横道に逸れたが、話を戻す。 エクスポート状態が不正な場合は、設定ファイル/etc/exportsを見直す。 pi@raspberrypi2:~ $ cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /media/pi/****01 192.168.11.0/24(rw,no_subtree_check) /media/pi/****02 192.168.11.0/24(rw,no_subtree_check) /media/pi/****03 192.168.11.0/24(rw,no_subtree_check) /media/pi/****04 192.168.11.0/24(rw,no_subtree_check) pi@raspberrypi2:~ $ 変更した場合は再起動。または以下コマンドでサービスを再起動。 pi@raspberrypi2:~ $ sudo exportfs -ra pi@raspberrypi2:~ $ sudo systemctl restart nfs-kernel-server pi@raspberrypi2:~ $ クライアント側確認ポイント 1. 接続確認 pingで NFSサーバに到達することを確認。 pi@raspberrypi4:~ $ ping 192.168.11.101 PING 192.168.11.101 (192.168.11.101) 56(84) bytes of data. 64 bytes from 192.168.11.101: icmp_seq=1 ttl=64 time=2.43 ms 64 bytes from 192.168.11.101: icmp_seq=2 ttl=64 time=2.35 ms 64 bytes from 192.168.11.101: icmp_seq=3 ttl=64 time=9.30 ms ^C --- 192.168.11.101 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 2.350/4.692/9.301/3.258 ms pi@raspberrypi4:~ $ 2. エクスポート確認 showmount -e <hostname>でエクスポートの確認。正常なら以下。クライアント側から NFSサーバの共有が見えること。 pi@raspberrypi4:~ $ showmount -e 192.168.11.101 Export list for 192.168.11.101: /media/pi/****04 192.168.11.0/24 /media/pi/****03 192.168.11.0/24 /media/pi/****02 192.168.11.0/24 /media/pi/****01 192.168.11.0/24 pi@raspberrypi4:~ $ ここでエラーが発生するかエクスポートが確認できない場合はサーバ側の問題なので、そちらの設定を再確認。 3. マウント状態確認 マウントディレクトリ確認。以下は/mnt/nfs配下にマウント。 pi@raspberrypi4:~ $ ls -la /mnt/nfs 合計 24 drwxr-xr-x 6 root root 4096 2月 24 23:43 . drwxr-xr-x 3 root root 4096 11月 30 21:47 .. drwxrwxrwx 1 pi pi 4096 8月 11 2021 ****01 drwxrwxrwx 1 pi pi 4096 3月 19 2021 ****02 drwxrwxrwx 1 pi pi 4096 12月 1 19:35 ****03 drwxrwxrwx 1 pi pi 4096 2月 11 18:01 ****04 pi@raspberrypi4:~ $ というか冒頭の例のようにdf -hで確認した方が確実か。 /etc/fstabでマウント設定を行っている場合で且つマウントされていない場合は/etc/fstabを見直す。 pi@raspberrypi4:~ $ cat /etc/fstab (中略) 192.168.11.101:/media/pi/****01 /mnt/nfs/****01 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0 192.168.11.101:/media/pi/****02 /mnt/nfs/****02 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0 192.168.11.101:/media/pi/****03 /mnt/nfs/****03 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0 192.168.11.101:/media/pi/****04 /mnt/nfs/****04 nfs _netdev,nofail,rw,defaults,nfsvers=3 0 0 pi@raspberrypi4:~ $ 設定を変更した場合はsudo mount -aで再マウント。因みに/etc/fstabでマウントする場合、マウントポイント(マウント用ディレクトリ、上記の/mnt/nfs/****01等)は明示的に作成しなくてもシステムが用意しマウントしてれくる。 sudo mount -aでエラーが発生する場合は手動マウントも試してみる。その場合はマウント用ディレクトリを作成してからマウントする。 mkdir /mnt/nfs/****04 sudo mount -t nfs -o nfsvers=3 192.168.11.101:/media/pi/****04 /mnt/nfs/****04 そしてエラーメッセージでぐぐる。 (具体例は今後追記予定) その他 全ての設定を見直したが全て正常。しかし何故かマウントできる共有ディレクトリとできないものがある場合。 複数HDD を NFS共有している場合、NFSサーバ起動時に全ての HDD のマウントが完了する前に NFSサービスが開始し、不整合が発生する場合があるっぽい。 その場合はサーバ側で以下コマンドを実行しサービスを再起動する。 sudo exportfs -ra sudo systemctl restart nfs-kernel-server 参考URL showmount(8) exportfs(8)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む