2025年3月20日木曜日

Linux VNC 構築参考

 


https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-20-04-ja


参照したーーーー


Tutorial

Ubuntu 20 .04にVNC をインストールして構成 する方法

Published on October 21, 2020
日本語
Ubuntu 20 .04にVNC をインストールして構成 する方法

はじめに

仮想ネットワークコンピューティング、 すなわちVNC(Virtual Network Computing)は、キーボードとマウスを使用して 、リモートサーバー上のグラフィカルデスクトップ環境と対話できるようにする接続システムです 。これにより、コマンドラインにまだ慣れていないユーザーにとって、リモートサーバー上のファイル、ソフトウェア、および設定の管理が簡単になります。

このガイドでは、Ubuntu 20.04サーバー上にTightVNCを使用してVNCサーバーを設定し、SSHトンネルを介して安全に接続します。次に、ローカルマシンでVNCクライアントプログラムを使用し、グラフィカルデスクトップ環境を介してサーバーと対話します。

前提条件

このチュートリアルを完了する には 、 次のものが必要です。

  • root以外の管理ユーザー権限とUFWで構成したファイアウォールを備えたUbuntu20.04サーバー1台。これを設定するには、Ubuntu 20.04 初期サーバー設定ガイドを参照してください。
  • VNC クライアントがインストールされ たローカルコンピュータ 。使用するVNCクライアントは 、SSHトンネルを介した接続をサポートしている必要があります 。
    • Windowsでは 、 TightVNC 、 RealVNC 、 または UltraVNC を使用 でき ます 。
    • macOS では 、 組み込みの画面共有 プログラムを使用するか 、 RealVNC のようなクロスプラットフォームアプリを使用できます 。
    • Linuxでは 、 vinagre 、 krdc 、 RealVNC 、 TightVNC などの多くのオプションから選択でき ます 。

ステップ 1 — デスクトップ環境とVNC サーバーをインストールする

デフォルトでは 、Ubuntu 20 .04サーバーにはグラフィカルデスクトップ 環境やVNC サーバーがインストールされていないため、それらのインストールから始めます 。

選択するVNCサーバーとデスクトップ環境に関しては、多くのオプションがあります。このチュートリアルでは、最新のXfceデスクトップ環境用のパッケージと、公式のUbuntuリポジトリで利用可能なTightVNCパッケージをインストールします。XfceとTightVNCは、いずれも軽量で高速ですから、低速のインターネット接続でもスムーズで安定したVNC接続を保証します。

SSHでサーバーに接続した後 、パッケージのリストを更新 し ます 。

  1. sudo apt update

次に、xfce4-goodiesパッケージと共にXfceをインストールします。これには、デスクトップ環境のいくつかの拡張機能が含まれています。

  1. sudo apt install xfce4 xfce4-goodies

インストール中に、Xfceのデフォルトのディスプレイマネージャーを選択するように求められる場合があります。ディスプレイマネージャーは、グラフィカルインターフェイスを介してデスクトップ環境を選択してログインできるようにするプログラムです。Xfceは、VNCクライアントに接続するときにのみ使用します。これらのXfceセッションでは、root以外のUbuntuユーザーとして既にログインしています。したがって、このチュートリアルでは、ディスプレイマネージャーの選択は適切ではありません。いずれかを選択してENTERキーを押します。

インストールが完了したら、TightVNCサーバーをインストールします。

  1. sudo apt install tightvncserver

次に、vncserverコマンドを実行してVNCアクセスパスワードを設定し、初期構成ファイルを作成し、VNCサーバーインスタンスを起動します。

  1. vncserver

次に、マシンにリモートアクセスするためのパスワードを入力して確認するように求められます。

Output
You will require a password to access your desktops. Password: Verify:

パスワードは6〜8文字の長さである必要があります。8文字を超えるパスワードは自動的に切り捨てられます。

パスワードを確認すると、表示専用のパスワードを作成するオプションが表示されます。表示専用パスワードでログインするユーザーは、マウスまたはキーボードでVNCインスタンスを制御できなくなります。これは、VNCサーバーを使用して他の人に何かをデモンストレーションしたい場合に便利なオプションですが、必須ではありません。

次に、このプロセスは、サーバーに必要なデフォルトの構成ファイルと接続情報を作成します。さらに、ポート5901でデフォルトのサーバーインスタンスを起動します。このポートはディスプレイポートと呼ばれ、VNCでは:1として参照されます。VNCは、他のディスプレイポートで複数のインスタンスを起動できます。例えば、:2 はポート5902を参照し、:3 は5903を参照する、など。

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

ここで留意すべきは、パスワードを変更したり、表示専用のパスワードを追加したい場合は、vncpasswd コマンドを使用できることです。

  1. vncpasswd

この時点では、VNCサーバーがインストールされて実行されています。それでは、Xfceを起動し、グラフィカルインターフェイスを介してサーバーにアクセスできるように構成しましょう。

ステップ2 — VNCサーバーの構成をする

VNCサーバーは、起動時にどのコマンドを実行するか知る必要があります。具体的には、VNCは、接続する必要のあるグラフィカルデスクトップ環境がどれかを知る必要があります。

VNCサーバーが起動時に実行するコマンドは、ホームディレクトリ配下にある.vncフォルダ内のxstartupと呼ばれる構成ファイルにあります。起動スクリプトは、前のステップでvncserverコマンドを実行したときに作成されていましたが、Xfceデスクトップを起動するためには、独自のスクリプトを作成します。

VNCサーバーの構成方法を変更するので、最初に、次のコマンドを使用して、ポート5901で実行されているVNCサーバーインスタンスを停止します。

  1. vncserver -kill :1

別のPIDが表示されますが、出力は次のようになります。

Output
Killing Xtightvnc process ID 17648

xstarturpファイルを変更する前に、元ファイルをバックアップします。

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

ここで、新しいxstarturpファイルを作成し、nanoなどのテキストエディターで開きます。

  1. nano ~/.vnc/xstartup

次に、ファイルに次の行を追加します。

~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

最初の行は、shebangです。* nixプラットフォーム上の実行可能なプレーンテキストファイルで、shebangは、システムに、そのファイルをどのインタプリタに渡して実行するかを指示します。この場合、ファイルをBashインタプリタに渡します。これにより、連続する各行を順番にコマンドとして実行できるようになります。

ファイルに記述される最初のコマンドxrdb $HOME/.Xresourcesは、VNCのGUIフレームワークに、サーバーユーザーの.Xresourceファイルを読み取るように指示します。.Xresourceは、ユーザーが、端末の色、カーソルテーマ、フォントレンダリングなど、グラフィカルデスクトップの特定の設定を変更できる場所です。2番目のコマンドは、サーバーにXfceを起動するように指示します。VNCサーバーを起動または再起動するたびに、これらのコマンドが自動的に実行されます。

これらの行を追加したら、ファイルを保存して閉じます。nanoを使用した場合は、CTRL + X、Y、ENTERキーを押します。

VNCサーバーがこの新しいスタートアップファイルを適切に使用できるようにするために、実行可能なファイルにする必要があります。

  1. chmod +x ~/.vnc/xstartup

次に、VNCサーバーを再起動します。

  1. vncserver -localhost

この時のコマンドには、VNCサーバーをサーバーのループバックインターフェイスにバインドする-localhostオプションが含まれていることに注意してください。これにより、VNCは、それがインストールされているサーバーから発信された接続のみを許可します。

次のステップでは、ローカルマシンとサーバーの間にSSHトンネルを確立し、VNCがローカルマシンからの接続がサーバーから発信されたものと思わせる仕掛けをします。この戦略により、VNCの周囲にセキュリティの層が追加されます。これは、VNCにアクセスできるのは、サーバーへのSSHアクセスを既に持っているユーザーのみであるためです。

次のような出力が表示されます。

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

これで、ローカルマシンからVNCサーバーに接続する準備が整いました。

ステップ3 — VNCデスクトップに安全な接続をする

VNC自体は、接続時に安全なプロトコルを使用しません。サーバーに安全に接続するには、SSHトンネルを確立してから、VNCクライアントに、直接接続するのではなく、そのトンネルを使用して接続するように指示します。

VNC用のlocalhost接続に安全に転送するローカルコンピュータ上にSSH接続を作成します。この操作は、LinuxまたはmacOSのターミナルを介して、次のsshコマンドで実行できます。

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

この ssh コマンドのオプションの意味は次のとおりです。

  • -L 59000:localhost:5901:-Lスイッチは、ローカルコンピューター(59000)の指定されたポートが宛先サーバー(localhost:5901は、宛先サーバーのポート5901を意味し、your_server_ipとして定義される)の指定されたホストとポートに転送されるよう指定します指定するローカルポートは多少任意であることに注意してください。ポートがまだ別のサービスにバインドされていない限り、トンネルの転送ポートとして使用できます。
  • -C:このフラグは圧縮を有効にし、リソースの消費を最小限に抑え、処理を高速化します。
  • -N: このオプションは、リモートコマンドを実行したくないsshに指定します。この設定は、ポートを転送するだけの場合に役立ちます。
  • -l sammy your_server_ip :-lスイッチを使用すると、サーバーに接続したときにログインするユーザーを指定できます。 sammy と your_server_ip は、root以外のユーザーの名前とサーバーのIPアドレスに必ず置き換えてください。

注:このコマンドは、VNCサーバーのポート5901から各マシンのポート22(SSHのデフォルトポート)を介してローカルマシンのポート59000に情報を転送するSSHトンネルを確立します。前提条件となるUbuntu 20.04の初期サーバーセットアップガイドに従っていると仮定する場合、OpenSSHを介したサーバーへの接続を許可するUFWルールを追加します。

これは、サーバーのファイアウォールを単に開いてポート5901への接続を許可するよりも安全です。これにより、誰でもVNCを介してサーバーにアクセスできるようになります。SSHトンネルを介して接続することにより、サーバーへのSSHアクセスを既に持っているマシンへのVNCアクセスを制限します

PuTTYを使用してサーバーに接続している場合は、ターミナルウィンドウのトップバーを右クリックし、**Change Settings…(設定の変更)**オプションをクリックします。

トップバーを右クリックして、Change Settings(設定の変更)オプションを表示します

PuTTY再構成ウィンドウの左側にあるツリーメニューで接続ブランチを見つけます。SSHブランチを展開し、トンネルをクリックします。**[Options controlling SSH port forwarding(SSHポート転送画面を制御するオプション]**画面において、5900をソースポートとして、localhost:5901を宛先として入力します。

PuTTY SSHトンネル構成の例

次に、追加ボタンをクリックし、適用ボタンをクリックしてトンネルを実装します。

トンネルが起動したら、VNCクライアントを使用してlocalhost:59000に接続します。ステップ1に設定したパスワードを使用して認証するよう求められます。

接続すると、デフォルトのXfceデスクトップが表示されます。このように表示されるはずです。

Xfceデスクトップ環境でのUbuntu 20.04サーバーへのVNC接続

次に示すように、ファイルマネージャーまたはコマンドラインから、ホームディレクトリ内のファイルにアクセスできます。

Ubuntu20.04へのVNC接続を介したファイルマネージャー

ローカルターミナルでCTRL + Cを押して、SSHトンネルを停止し、プロンプトに戻ります。これにより、VNCセッションも切断されます。

これで、systemdサービスとして実行するようにVNCサーバーを構成できます。

ステップ4 — システムサービスとしてVNCを実行する

systemdサービスとして実行するようにVNCサーバーを設定することにより、他のサービスと同様に、必要に応じてサーバーを開始、停止、再起動できます。systemdの管理コマンドを使用して、サーバーの起動時にVNCが確実に起動するようにすることもできます。

まず、/etc/systemd/system/vncserver@.serviceという新しいユニットファイルを作成します。

  1. sudo nano /etc/systemd/system/vncserver@.service

名前の最後にある@記号を使用すると、サービス構成で使用できる引数を渡すことができます。これを使用して、サービスを管理するときに使用するVNC表示ポートを指定します。

ファイルに次の行を追加します。ユーザー、グループ、WorkingDirectory、PIDFILEの値の中のユーザー名をユーザー名に変更してください。

/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

ExecStartPreコマンドは、すでに実行している場合は、VNCを停止します。ExecStartコマンドはVNCを起動し、色深度を1280x800の解像度で24ビットカラーに設定します。ニーズに合わせて、これらの起動オプションを変更することもできます。また、ExecStartコマンドには-localhostオプションが含まれていることに注意してください。

ファイルを保存して閉じます。

次に、システムに新しいユニットファイルを認識させます。

  1. sudo systemctl daemon-reload

ユニットファイルを有効にします。

  1. sudo systemctl enable vncserver@1.service

@記号に続く1は、サービスが表示される表示番号を示します。この場合、ステップ2で説明したデフォルトの:1です。

VNCサーバーがまだ実行中の場合は、現在のインスタンスを停止します。

  1. vncserver -kill :1

次に、他のsystemdサービスを開始するのと同じように開始します。

  1. sudo systemctl start vncserver@1

このコマンドで起動したことを確認できます。

  1. sudo systemctl status vncserver@1

正しく起動した場合は、出力は次のようになります。

Output
● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 39795 (Xtightvnc) ...

これで、サーバーが起動するたびにVNCサーバーを使用できるようになり、他のsystemdサービスと同様にsystemctlコマンドを使用してサーバーを管理できます。

ただし、クライアント側には違いはありません。再接続するには、SSHトンネルを再度起動します。

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

次に、VNCクライアントソフトウェアを使用してlocalhost:59000に新しい接続を確立し、サーバーに接続します。

まとめ

これで、Ubuntu 20.04サーバー上で安全なVNCサーバが起動し、実行されるようになりました。これで、ファイル、ソフトウェア、設定をユーザーフレンドリーなグラフィカルなインターフェースで管理できるようになり、Webブラウザのようなグラフィカルなソフトウェアをリモートで実行できるようになります。

2025年2月26日水曜日

Gnu C リンカ

 Gnu C Linker めおめも

https://qiita.com/seriru13/items/c2f5192615162c4c3f47   参照


gcc コンパイルオプション備忘録


参考サイト

gccコンパイラの使い方
江添亮のC++入門
リンカの役割 自分メモメモ
[C言語] 共有ライブラリと動的ライブラリを整理する

実行環境

  • Ubuntu 16.04 LTS
  • gcc 5.4

a.outを作る

$ gcc main.c

gcc が main.c を処理し、 a.out という実行ファイルが作られる。

実行ファイルに名前をつける

$ gcc main.c -o main

実行ファイルに名前をつけるときは -o オプションを使う。
実行後、 main という名前の実行ファイルが作られる。

複数のファイルから実行ファイルを作る

$ gcc main.c hello.c -o main

main.c hello.c という2つのファイルから main という実行ファイルを作る。

※ 例

main.c
#include <stdio.h>

void f();

int main() {
  f();
}
hello.c
#include <stdio.h>

void f() {
  printf("hello\n");
}

上記のコマンドでこの2つのファイルをコンパイルして、 ./main を実行すると

$ hello

と出力される。

オブジェクトファイルを作る

オブジェクトファイルはコンパイルはしたがリンクが終わっていない状態のファイルのこと。
gccでは以下のステップを踏んで実行ファイルが作られる。

  • プリプロセッサ
    • コンパイルを行う前にソースコードに対して行われる前処理
    • c/c++では, ディレクティブ(# ...)という命令を処理する。
ディレクティブの例
#include
#define
#if
#ifndef
#elif
#endif

などなど...
  • コンパイル

    • ソースコードをチェックして、中間言語や機械語に翻訳する。
  • リンク

    • オブジェクトファイルやライブラリを連結して、実行ファイルを作る。

例えば、 hello.c というファイルをオブジェクトファイルにするときは -c オプションを使用する。

$ gcc -c hello.c

これを実行することで hello.o というオブジェクトファイルが作られる。

もちろん複数ファイルも指定できる。

$ gcc -c a.c b.c

これで a.o b.o ができた。

複数のオブジェクトファイルから実行ファイルを作る

a.c b.c c.c というソースコードから以下のコマンドを使用して main という実行ファイルを作るとする。

$ gcc a.c b.c c.c -o main

その後、 a.c を変更したので main を更新したくなった。
しかし、main を更新するために上記コマンドを実行すると変更していない b.c c.c も再びコンパイルすることになり二度手間である。

そういうときにはすでにコンパイル済みのオブジェクトファイルを使うことができる。

$ gcc a.c b.o c.o -o main

これで実行ファイル main ができた。

静的ライブラリをリンクする -L

静的ライブラリとは libxxx.a のようなファイルのこと。
オブジェクトファイルの集合体で、 ar コマンドを使用して以下のように作成する。

ar -r libsample.a a.o b.o c.o

※ nm コマンドとか使うと色々中身が見れる。aファイル作成前のoファイルと比較すると面白いかも?

静的ライブラリもオブジェクトファイルの集合体だから、実行ファイルを作成するときに使用することができる。
ただしコンパイル時に静的ライブラリがあるディレクトリを -L オプションで指定する必要がある。

例えば、

---
 |- a.c
 |- b.c
 |- libsample.a 

というディレクトリ構成で, a.c b.c libsample.a から実行ファイル main を作るときは以下のようにしてディレクトリと静的ライブラリを指定する。

$ gcc a.c b.c -L. -lsample -o main

静的ライブラリは -lxxx の形で指定する。lib、.a の部分は省略することができる。

(ここから少し怪しいです...)

-Lで静的ライブラリが存在するディレクトリを指定すると書いたが、 算術用ライブラリ libm.a は

$ gcc a.c -lm -o main

のように -L オプションなしで使用できる。
これは、リンカがデフォルトでライブラリを探しにいくディレクトリが決まっているからである。

これは ld --verbose でリンカスクリプトを見ると書いてある。

参考: リンカの役割 自分メモメモ

ヘッダを追加 -I

c/c++言語でヘッダファイルをインクルードする際には #include ディレクティブを使用する。

このときヘッダファイルの指定には以下の2つ方法がある。

ヘッダファイルの指定方法
#include <stdio.h> 
#include "stdio.h"

<...> と "..." の違いはコンパイラがヘッダファイルを探しにいくディレクトリのパスである。

<...> はデフォルトで指定されているパスを参照してヘッダファイルを探す。
"..." はデフォルトで指定されているパスに加えて "..." 内に書かれたパスにもヘッダファイルを探しにいく。

コンパイラがデフォルトで参照するパスは -v オプションを使用して、コンパイル処理の各段階において実行されたコマンドを出力することによって確認するのが手っ取り早い。

例えば、次の出力は ubuntu 16.04LTS で gcc -v xxx.c を実行させたときの一部である。

COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86-64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu

... 省略 ...

#include "..." search starts here:
#include <...> search starts here:
  /usr/include/c++/5
  /usr/include/x86_64-linux-gnu/c++/5
  /usr/include/c++/5/backward
  /usr/local/include

... 省略 ...

しかし、毎回ヘッダファイルの指定に #include "..." を使うのはパスをハードコーディングすることになり、色々面倒だ。

その時に使用するのが -I オプションである。
-I オプションを使用すると、 コンパイラが参照するパスに -I で指定したパスを追加してくれる。

次の出力は、 gcc -I../ -v xxx.c を実行したものである。

COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86-64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu

... 省略 ...

#include "..." search starts here:
#include <...> search starts here:
  ../
  /usr/include/c++/5
  /usr/include/x86_64-linux-gnu/c++/5
  /usr/include/c++/5/backward
  /usr/local/include

... 省略 ...

しっかりと <...> にパスが追加されている。
これで #include <...> で自作のヘッダが追加できるようになった。

-Wall, -W

  • バグかもしれない部分に警告を出してくれる。

-std=c++11, 14, 17, ...

  • それぞれ, c++11, c++14, c++17の機能を有効にする。
    • C++は3年に1回新しい国際基準が更新されるため、C++20なら, -std=c++20のように追加されていくでしょう。
    • 参考: 処理系

-O1, -O2, -O3, -Os


2025年2月6日木曜日

whl python ライブラリ 非インターネット

 


インターネットに接続できない環境で、Wheelファイルを使用することでPythonのパッケージのインストールが可能です。
今回は、IGWがアタッチされていない環境でEC2に、boto3をインストールします。

まとめ

  • pipを使わずに、whlファイルを使ってインストールします。

概要

Wheelファイルとは?

PEP427を参照すると、以下のように書かれています。

wheel は、特別な形式のファイル名と .whl 拡張子を持つ ZIP 形式のアーカイブです。特定のインストールスキームで PEP 376 に従ってインストールされるのとほぼ同じ単一のディストリビューションが含まれています。専用のインストーラーが推奨されますが、標準の「unzip」ツールを使用してサイト パッケージに展開するだけでホイール ファイルをインストールできます。

  • Wheelは、ZIP形式のアーカイブのこと。拡張子は、「.whl」。

実践

インターネットが繋がるPC上で、whlファイルをダウンロードし一旦S3に配置後、EC2からダウンロードしインストールします。

whlファイルのダウンロード

インターネットが繋がるPCで、boto3と関連するファイルをダウンロードし、S3にアップロードします。

curl https://files.pythonhosted.org/packages/23/d8/3b41ce8c96dedbb449f24de21eee0742786f414fea176f984b1101154f30/boto3-1.24.84-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/36/32/6ddb12143e32535550263514875db6d1a3ad50daf1377fbb1aac03a000aa/botocore-1.27.84-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/6f/de/5be2e3eed8426f871b170663333a0f627fc2924cc386cd41be065e7ea870/urllib3-1.26.12-py2.py3-none-any.whl -O

aws s3 cp boto3-1.24.84-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp botocore-1.27.84-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp jmespath-1.0.1-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp python_dateutil-2.8.2-py2.py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp six-1.16.0-py2.py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp urllib3-1.26.12-py2.py3-none-any.whl s3://${バケット名}/ec2/

インストール

EC2にログインし、先程、アップロードしたファイルをS3からダウンロード後、インストールします。

aws s3 cp s3://${バケット名}/ec2/boto3-1.24.84-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/botocore-1.27.84-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/mespath-1.0.1-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/python_dateutil-2.8.2-py2.py3-none-any.whl  /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/six-1.16.0-py2.py3-none-any.whl  /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/urllib3-1.26.12-py2.py3-none-any.whl  /home/ssm-user/


sh-4.2$ pwd
/home/ssm-user
sh-4.2$ ls -l
total 9528
-rw-r--r-- 1 ssm-user ssm-user  132500 Oct  1 15:13 boto3-1.24.84-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 9189276 Oct  1 15:46 botocore-1.27.84-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user   20256 Oct  1 15:53 jmespath-1.0.1-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user  247702 Oct  1 15:58 python_dateutil-2.8.2-py2.py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user   11053 Oct  1 16:05 six-1.16.0-py2.py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user  140381 Oct  1 16:09 urllib3-1.26.12-py2.py3-none-any.whl
sh-4.2$

pip3 install  --no-deps ./boto3-1.24.84-py3-none-any.whl
pip3 install  --no-deps ./botocore-1.27.84-py3-none-any.whl
pip3 install  --no-deps ./mespath-1.0.1-py3-none-any.whl
pip3 install  --no-deps ./python_dateutil-2.8.2-py2.py3-none-any.whl
pip3 install  --no-deps ./six-1.16.0-py2.py3-none-any.whl
pip3 install  --no-deps ./urllib3-1.26.12-py2.py3-none-any.whl

sh-4.2$ pip3 list
Package           Version
----------------- -------
aws-cfn-bootstrap 2.0
boto3             1.24.84
botocore          1.27.84
docutils          0.14
jmespath          1.0.1
lockfile          0.11.0
pip               20.2.2
pystache          0.5.4
python-daemon     2.2.3
python-dateutil   2.8.2
setuptools        49.1.3
simplejson        3.2.0
six               1.16.0
urllib3           1.26.12
sh-4.2$

考察

インターネットに繋がらない環境で、環境を構築することはたまにあります。
忘れないようにメモとして残しておきます。