{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/what-is-installation","result":{"data":{"markdownRemark":{"id":"7ab878a6-f75b-5b78-a3d5-8ab9c69d4f22","html":"<h2 id=\"インストール-とは？\" style=\"position:relative;\"><a href=\"#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-%E3%81%A8%E3%81%AF%EF%BC%9F\" aria-label=\"インストール とは？ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>“インストール” とは？</h2>\n<p>“インストール” という言葉は、「何をしてくれるか分からないけど、とりあえず入れたソフトウェアが使えるようになる」くらいに思われやすいと思います。</p>\n<p>「<a href=\"https://wa3.i-3-i.info/word149.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">インストールとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a>」というページでは、</p>\n<blockquote>\n<p>（ソフトを中に入れて）パソコンやソフトを使えるように準備すること</p>\n</blockquote>\n<p>と説明されています。</p>\n<p>この説明の通り、<strong>“インストール” というのは、単に関係するファイルをコンピュータ上に保存して、各種設定をしてしまうだけのこと</strong>を指しています。</p>\n<p>設定というのもファイルに保存するわけですから、結局は<strong>関係するファイルをダウンロードしたりしてきて配置したりするだけ</strong>ということです。</p>\n<p><strong>インストールしたものを実行するのも、単に実行形式のプログラムのファイルを実行するだけ</strong>です。</p>\n<h2 id=\"nginx-をインストールして確認\" style=\"position:relative;\"><a href=\"#nginx-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D\" aria-label=\"nginx をインストールして確認 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Nginx をインストールして確認</h2>\n<p>実際に、Nginx (よく使われる Web サーバのソフトウェア) をサーバにインストールして、このことを確認していこうと思います。</p>\n<p>なお、以後の確認は AWS EC2 の Ubuntu で実施しました。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ cat /proc/version\nLinux version 5.4.0-1045-aws (buildd@lcy01-amd64-026) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #47-Ubuntu SMP Tue Apr 13 07:02:25 UTC 2021</code></pre></div>\n<h2 id=\"nginx-インストール\" style=\"position:relative;\"><a href=\"#nginx-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB\" aria-label=\"nginx インストール permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Nginx インストール</h2>\n<p>まずは Nginx をインストールするため、apt コマンドを実行します。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo apt update -y\n$ sudo apt install -y nginx</code></pre></div>\n<p>インストールが完了したら、Nginx のステータスを確認します。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo systemctl status nginx\n● nginx.service - A high performance web server and a reverse proxy server\n     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)\n     Active: active (running) since Tue 2021-07-06 04:18:08 UTC; 4s ago\n       Docs: man:nginx(8)\n    Process: 3267 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)\n    Process: 3278 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)\n   Main PID: 3279 (nginx)\n      Tasks: 5 (limit: 9418)\n     Memory: 5.1M\n     CGroup: /system.slice/nginx.service\n             ├─3279 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;\n             ├─3280 nginx: worker process\n             ├─3281 nginx: worker process\n             ├─3282 nginx: worker process\n             └─3283 nginx: worker process\n\nJul 06 04:18:08 ip-172-31-6-255 systemd[1]: Starting A high performance web server and a reverse proxy server...\nJul 06 04:18:08 ip-172-31-6-255 systemd[1]: Started A high performance web server and a reverse proxy server.</code></pre></div>\n<p>ステータスは</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">     Active: active (running) since Tue 2021-07-06 04:18:08 UTC; 4s ago</code></pre></div>\n<p>となっているので、無事起動しているようです。</p>\n<p>実際に curl でアクセスしてみると…</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ curl localhost\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;Welcome to nginx!&lt;/title&gt;\n    :</code></pre></div>\n<p>デフォルトで表示されるページが返ってきました！</p>\n<h2 id=\"どんなコマンドで実行されているのか\" style=\"position:relative;\"><a href=\"#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B\" aria-label=\"どんなコマンドで実行されているのか permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>どんなコマンドで実行されているのか</h2>\n<p>では、Nginx がどんなコマンドで実行されているのか、Nginx のプログラムのファイルはどこにあるのかを見ていきます。</p>\n<p>Nginx のステータスの表示から関係する部分を抜粋すると…</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo systemctl status nginx\n    :\n     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)\n    :\n    Process: 3278 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)\n    :</code></pre></div>\n<p>上記の Loaded の部分に書かれている <code class=\"language-text\">/lib/systemd/system/nginx.service</code> というファイルに書かれている通り、<code class=\"language-text\">/usr/sbin/nginx -g daemon on; master_process on;</code> というコマンドで起動したようです。</p>\n<p><code class=\"language-text\">/lib/systemd/system/nginx.service</code> を見てみると…</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ <span class=\"token function\">cat</span> /lib/systemd/system/nginx.service\n    <span class=\"token builtin class-name\">:</span>\n<span class=\"token punctuation\">[</span>Unit<span class=\"token punctuation\">]</span>\n<span class=\"token assign-left variable\">Description</span><span class=\"token operator\">=</span>A high performance web server and a reverse proxy server\n<span class=\"token assign-left variable\">Documentation</span><span class=\"token operator\">=</span>man:nginx<span class=\"token punctuation\">(</span><span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n<span class=\"token assign-left variable\">After</span><span class=\"token operator\">=</span>network.target\n\n<span class=\"token punctuation\">[</span>Service<span class=\"token punctuation\">]</span>\n<span class=\"token assign-left variable\">Type</span><span class=\"token operator\">=</span>forking\n<span class=\"token assign-left variable\">PIDFile</span><span class=\"token operator\">=</span>/run/nginx.pid\n<span class=\"token assign-left variable\">ExecStartPre</span><span class=\"token operator\">=</span>/usr/sbin/nginx -t -q -g <span class=\"token string\">'daemon on; master_process on;'</span>\n<span class=\"token assign-left variable\">ExecStart</span><span class=\"token operator\">=</span>/usr/sbin/nginx -g <span class=\"token string\">'daemon on; master_process on;'</span>\n<span class=\"token assign-left variable\">ExecReload</span><span class=\"token operator\">=</span>/usr/sbin/nginx -g <span class=\"token string\">'daemon on; master_process on;'</span> -s reload\n<span class=\"token assign-left variable\">ExecStop</span><span class=\"token operator\">=</span>-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid\n<span class=\"token assign-left variable\">TimeoutStopSec</span><span class=\"token operator\">=</span><span class=\"token number\">5</span>\n<span class=\"token assign-left variable\">KillMode</span><span class=\"token operator\">=</span>mixed\n\n<span class=\"token punctuation\">[</span>Install<span class=\"token punctuation\">]</span>\n<span class=\"token assign-left variable\">WantedBy</span><span class=\"token operator\">=</span>multi-user.target</code></pre></div>\n<p>たしかに、起動コマンドが</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">ExecStart=/usr/sbin/nginx -g &#39;daemon on; master_process on;&#39;</code></pre></div>\n<p>のように書かれています。</p>\n<p>この記述をもとに、systemd というプログラムが Nginx を起動してくれているわけです。</p>\n<p>このように、<strong>Nginx と言えど単なる実行可能ファイル (/usr/sbin/nginx) が正体であり、これを手動で実行すればインストールしたのと同じように動く</strong>はずです。</p>\n<h2 id=\"手動で動かしてみる\" style=\"position:relative;\"><a href=\"#%E6%89%8B%E5%8B%95%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B\" aria-label=\"手動で動かしてみる permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>手動で動かしてみる</h2>\n<p>では、<code class=\"language-text\">/lib/systemd/system/nginx.service</code> の設定をもとに Nginx を動かすのではなく、手動でコマンドを打って起動できるか試してみようと思います。</p>\n<p>まずは Nginx を一旦停止します。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo systemctl stop nginx</code></pre></div>\n<p>手動でどんなコマンドを打つべきかは、<a href=\"https://github.com/nginxinc/docker-nginx/blob/f3fe494531f9b157d9c09ba509e412dace54cd4f/mainline/debian/Dockerfile#L116\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Nginx の Dockerfile</a> が参考になります。</p>\n<blockquote>\n<p>CMD [“nginx”, “-g”, “daemon off;”]</p>\n</blockquote>\n<p>の記述を参考に実行すればよさそうです。</p>\n<p>では、実行してみます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ sudo nginx -g &#39;daemon off;&#39;</code></pre></div>\n<p>この状態でアクセスすると…</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ curl localhost\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;Welcome to nginx!&lt;/title&gt;\n    :</code></pre></div>\n<p>無事 HTML が返ってきました！</p>\n<p>このように、<strong>Nginx をインストールした際は設定ファイルに記載のコマンド通り systemd が動かしてくれているだけであり、手動でコマンドを打って動かすこともできます</strong>。</p>\n<p>※ 手動での起動はあくまで試しにやってみただけで、実際には systemd で動かした方がログ管理などが楽になります</p>\n<h3 id=\"ファイルを見てみる\" style=\"position:relative;\"><a href=\"#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%BF%E3%82%8B\" aria-label=\"ファイルを見てみる permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ファイルを見てみる</h3>\n<p>ここで少し、nginx コマンドのファイルを見てみようと思います。</p>\n<p>ファイルのありかは <code class=\"language-text\">/usr/sbin/nginx</code> です。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ which nginx\n/usr/sbin/nginx</code></pre></div>\n<p>file コマンドでファイルの種類を見てみると…</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ file /usr/sbin/nginx\n/usr/sbin/nginx: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=087cd7ff5400c7d80593bba6c8e4639004a765ca, for GNU/Linux 3.2.0, stripped</code></pre></div>\n<p>ということで、ELF という形式のファイルであることが分かりました。</p>\n<p>ELF は実行可能なバイナリファイルの一種です。</p>\n<p>Nginx 自体は C 言語で実装されており、そのコードをコンパイルしたりして実行可能なバイナリファイルにしたのが nginx コマンド (/usr/sbin/nginx ファイル) ということです。</p>\n<p>バイナリファイルなので通常のエディタで開いても読めませんが、objdump や readelf、od コマンドなどで中身を調べることができます。(リバースエンジニアリングする際はライセンスにご注意ください)</p>\n<p>ということで、「<strong>“Nginx をインストールする” というのは、単に実行形式のファイルや設定ファイルをダウンロードしてきて適切な場所に配置したりすること</strong>」ということが分かりました。</p>","fields":{"slug":"/posts/what-is-installation","tagSlugs":["/tag/linux/","/tag/os/"],"autoRecommendPosts":["what-is-executing-a-command-on-bash","best-way-to-setup-docker-volume","where-are-c-header-files","linux-kernel-build-install"]},"frontmatter":{"date":"2021-07-06T04:54:24.678Z","description":"\"インストール\" という言葉は、「何をしてくれるか分からないけど、とりあえず入れたソフトウェアが使えるようになる」くらいに思われやすいと思います。\n\"インストール\" というのは、単に関係するファイルをコンピュータ上に保存して、各種設定をしてしまうだけのことを指しています。\n実際に、Nginx をサーバにインストールして、このことを確認していこうと思います。","tags":["linux","os"],"title":"\"インストール\" というのはファイルを配置したりするだけという話","socialImage":null,"recommendPosts":["https://www.kanzennirikaisita.com/posts/what-is-executing-a-command-on-bash","https://www.kanzennirikaisita.com/posts/linux-next-step-books","https://www.kanzennirikaisita.com/posts/4839975868","https://www.kanzennirikaisita.com/posts/software-developer-books-index"]}}},"pageContext":{"slug":"/posts/what-is-installation"}},"staticQueryHashes":["251939775","3942705351","401334301"]}