投稿

9月, 2025の投稿を表示しています

RasberryPiにおける外部管理環境の制限

外部管理環境 macでPythonのライブラリをインストールする時に使用しているpipinstaller.shなるものをRasberryPiに転送して実行したところ、以下のようなエラーが出ました。 $sh ./pipinstaller.sh error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. For more information visit http://rptl.io/venv note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. CVSSの目的 ...

RasberryPi と遊ぼう〜Webサーバー導入〜

Docker上にApache&Tomcatを導入 引数として関数やメソッドを受け渡したいことがありましたので、そのメモ Docker Composeのインストール Docker Composeは複数のコンテナを管理するツールとのことです。 sudo apt install docker-compose -y 作業用ディレクトリの作成 今回はルートディレクトリ配下に作成します。 $ cd / $ sudo mkdir myDocker cd myDocker sudo mkdir apache 作業用ディレクトリの作成 docker-compose.yml を作成します。 複数のサービス(コンテナ)の設定を YAML 形式で定義して、docker-compose コマンドで一括起動・停止・管理できるようにするものです。 内容はChatGPTの言いなりです。 sudo nano docker-compose.yml $ docker-compose.yml の内容 version: "3.8" services: tomcat: image: tomcat:9-jdk17-temurin container_name: tomcat ports: - "8080:8080" environment: - TZ=Asia/Tokyo volumes: - ./webapps:/usr/local/tomcat/webapps networks: - webnet apache: image: httpd:2.4 container_name: apache ports: - "80:80" volumes: - ./a...

【Python】引数として関数・メソッドを受け渡す

引数として関数・メソッドを受け渡す 引数として関数やメソッドを受け渡したいことがありましたので、そのメモ Pythonでは、関数やメソッドもオブジェクトとして管理されているため、通常のオブジェクトのように引数で受け渡してあげればよいとのこと。 こんな感じです。 # シグナルの定義 selectItemForTableViewDialogSignal: Signal = Signal(list) # OKボタンをクリックした時のシグナルにsetCveIdメソッドを指定 ¥selectItemForTableViewDialogSignal.connect(self.setCveId)

【Python】MySQLのfatchallの実行結果

PythonでMySQLからデータを抽出した時の結果について PythonからMySQLのデータベースに対してSELECTを行うと、以下のような結果が返ってきます。 (('cpe:2.3:a:07fly:07flycms:1.2.0:*:*:*:*:*:*:*', '07fly 07flycms 1.2.0 '), ('cpe:2.3:a:07fly:07flycms:1.3.8:*:*:*:*:*:*:*', '07fly 07flycms 1.3.8 ')) これは結果がタプル型で返ってくるからだそうです。 以下、ChatGPTの回答 Pythonでは、cursor.fetchall() を使うと、 ・行ごとに1タプル ・列ごとに要素 という形で返されます。 とのこと。 私はlist型でデータを受け取りたかったため、以下の通り対処をしました。 # Select文を実行し、結果を受け取る result, error_code, err_msg = self.executeSql(sql) # 1行ずつ読み込んで、list型に変換していく。 result_list = [list(row) for row in result] タプル型をそのまま流用すればいいんじゃない?と思いつつ、今日は脳の活動が弱まっているため調査を諦めました。 何かわかったら追記します。

【python】PySide6 におけるウィンドウとかダイアログボックス内のアイテムの自動調整

PySide6 におけるウィンドウとかダイアログボックス内のアイテムの自動調整 PySide6などに同封されるDesignerでWindowやDialogを作成する際、verticalLayoutWidgetをまず画面いっぱいに配置して、その中にhrizonalLayoutWidgetを配置して、、、とGUIを作成していきます。 ただ、Designer上でverticalLayoutWidgetの設定を「SetDefaultConstraint」にする方法がわからず、毎回 GitHub Copilotに修正してもらっていたのですが、現在 GitHub Copilotの1ヶ月間で使用できる無料の範囲を使い切ってしまったので、ChatGPTに質問してみました。 質問内容はただ単に、ダイアログボックスとかの大きさにあわせてverticalLayoutWidgetを動的にサイズ変更したい、という至ってシンプルな内容です。 #before <property name="sizeConstraint"> <enum>QLayout::SizeConstraint::SetFixedSize</enum> </property> #after <property name="sizeConstraint"> <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum> </property> 本当はDesignerから変更する方法がわかれば手っ取り早いのですが、今はこれで妥協しておきます。

【python】pandasライブラリで作ったファイルのヘッダー行とインデックス列について

pandasライブラリを使うときのヘッダー行、インデックス列の有無 気づきの多いことはいいことなんですが、以下にpythonを脳死して使ってきたのかということが浮き彫りになっています。 前回のMySQLを操作する回で、ゴミ行とcveid列に連番が入っていて、データがずれていることを発見しました。 mysql> select * from NVD_DB.NVD_CVE_INFO; +-------+------------------+---------------------+---------------------+-------------------------+ | cveid | sourceidentifier | published | lastModified | vulnStatus | +-------+------------------+---------------------+---------------------+-------------------------+ | | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 3 | | 0 | CVE-1999-0095 | 0000-00-00 00:00:00 | 1988-10-01 04:00:00 | 2025-04-03T01:03:51.193 | +-------+------------------+---------------------+---------------------+-------------------------+ python上で、pandasライブラリを使ってNVDから拾ってきたデータ...

【python】MySQLを操作する

pythonからMySQLを操作する MySQLサーバーの構築ができたので、Pythonから操作していきます。 ライブラリのインストール pythonからMySQLを操作するにあたって、ライブラリのインストールを行います。 ChatGPTに聞いたところ、以下の2つのライブラリが提案されました。 ・mysql-connector-python ・PyMySQL 私はpyにどっぷり染まっているので、迷わず後者のpymysqlを選択しました。 本当はメリット・デメリットを検証した方がいいんでしょうけどね。 インストール方法は言わずもがな。pipコマンドのみです。 pip install PyMySQL データベースへ接続する データベースへ接続を行います。 PyMySQLではConnectオブジェクトを使います。 hostからcharsetまでは、MySQLサーバー構築時に設定したものです。 # MySQLに接続(local_infile=True がポイント) self.connection: pymysql.Connection[Cursor] = pymysql.connect( host=hostname, ...

【python】dict型オブジェクトに対するfor in

for in の挙動 list型やdict型のオブジェクトに対して for in を使って中の値を取得できます。 dict型については、例えばJOSN形式のファイルだったとして、特定のキー配下のデータだけを取得したい場合、dictionarys['key']みたいな書き方をすると思いますが、それがうまくいかないことがあります。 以下のデータは、NISTが公開しているNVDデータベースの一部です。 dct_cvechanges:{'change': {'cveId': 'CVE-2024-43047', 'eventName': 'CPE Deprecation Remap', 'cveChangeId': 'F8249569-C61B-44D4-A51E-C92727A312C6', 'sourceIdentifier': 'nvd@nist.gov', 'created': '2025-08-11T15:06:17.607', 'details': [{'action': 'Changed', 'type': 'CPE Configuration', 'oldValue': 'OR\r\n *cpe:2.3:o:qualcomm:video_collaboration_vc1_firmware:-:*:*:*:*:*:*:*', 'newValue': 'OR\r\n *cpe:2.3:o:qualcomm:video_collaboration_vc1_platform_firmware:-:*:*:*:*:*:*:*'}]}} ...

MySQLにおけるDB作成メモ

データベースを作る MySQL上にデータベースを作ります。 CREATE DATABASEコマンドを作成します。 今回は、NVD から取得した脆弱性情報を格納するデータベースを作りたいため、「NVD_DB」とします。 -- データベースを作成する CREATE DATABASE IF NOT EXISTS NVD_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CHARACTER SET utf8mb4:4byteのUTF-8 COLLATE utf8mb4_general_ci:UTF-8を使用し、大文字小文字を区別しない CREATE USERコマンドを作成します。 -- ユーザーを作成する CREATE USER 'ユーザー名'@'%' IDENTIFIED BY 'パスワード'; 便宜上1行しか書いていませんが、管理者と作業者の2ユーザー作ります。 CREATE TABLEコマンドを作ります。 -- テーブルを作成する -- CVE情報 -- CVE基本情報 CREATE TABLE IF NOT EXISTS NVD_DB.NVD_CVE_INFO ( ...

RasberryPi と遊ぼう〜DBMS導入〜

Dockerをインストールして、Docker上でMySQLを動かす RasberryPi上にDBMSを作って、PythonでDBを使いたかったので、DockerをインストールしてMySQLのサーバーを構築します。 Dockerのインストール Docker公式インストールスクリプトを使用して、Dockerをインストールします。 $ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh Dockerのバージョンを確認します。 $ docker --version $ Docker version 28.4.0, build d8eb465 ちゃんとインストールされていることを確認できました。 Dockerを、sudoコマンドを使わずに一般ユーザーで実行できるようにします。 ※$USER は現在のログインユーザーを表します。 $ sudo usermod -aG docker $USER Dockerの動作確認を行います。 $ docker r...

RasberryPi と遊ぼう〜セキュリティ強化編〜

セキュリティを強化する Firewallのインストールなど、セキュリティ強化を施していきます。 ufw Debian系のLinuxで、お手頃にインストールできるFirewallが ufw です。 インストール。 sudo apt install ufw systemctlでステータスを確認。 インストールは終了したが、おやすみ中です(inactive)。 $ systemctl status ufw ○ ufw.service - Uncomplicated firewall Loaded: loaded (/lib/systemd/system/ufw.service; enabled; preset: enabled) Active: inactive (dead) Docs: man:ufw(8) インストールは終了しましたが、おやすみ中です(inactive)。 続いてルールを確認します。 何も許可されていない。 $ sudo ufw status verbose Status: inactive 現時点では何も設定が行われてい...

RasberryPi と遊ぼう〜ssh編〜

RasberryPiとssh接続を確立する 前回、個人的にひっそりと詰んだステップです。 ssh接続を有効化する raspi-configコマンドを実行します。 raspi-config 「3 Interface Options」を選択します。 「I1 SSH」を選択します。 sshを有効にする場合は「はい」を選択します。 「Finish」を選択し、変更を適用するために再起動するよう促されたら「はい」を選択します。 sshの状態を確認します。 systemctl status サービス名 実行結果 $ systemctl status ssh ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled) Active: active (running) since Sat 2025-09-06 21:15:21 JST; 24min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 2125 (sshd) Tasks...

RasberryPi と遊ぼう 〜導入編〜

RasberryPiの構築 RasberryPi P5 を購入し、いろいろサービスをインストールしていたのですが、基礎の基礎、ssh が正しく動かず、クリーンインストールすることにしました。 ついでに、今まで記録だけとって整理していなかった導入記録を整理していこうと思います。 1.基本的なコマンドを覚える Debian系のOS(RasberryPiとか)では、パッケージのインストールは apt コマンドで行います。  以下 apt コマンドの使用事例を記載していきます。 パッケージのインストール。 sudo apt install パッケージ名 また、パッケージのアップデートは update -> upgrade の順に実行します。 RasberryPi 起動時に、ツールバー上でupdateがあるパッケージの一覧の確認とアップデートができますが、CUIでできた方がカッコいいじゃないか、ということで。 まずは、パッケージリストのアップデート。 sudo apt update 続いてアップデートの実行。 sudo apt upgrade ...