C言語でプログラミング言語に対する理解を深めてみます。ーWindows環境準備編ー
今回行う調査は「LLVMでのClangを使ってC言語を学習する。」です。
(このnote記事の画像はLLVMのロゴを使っています。)
iOSアプリ製作を行なっている時にUnsafePointerを使う機会に出会いました。個人製作なのでその場凌ぎで作ってもよかったのですがポインタに関して詳細な学習を後回しにして4年以上経っていることもあり、思い切って学習することにしました。
ただSwiftはポインタを直接扱うような記述を滅多にしません。
そのためC言語を使って学習していこうと思います。
Swiftは最終的にLLVMによってコンパイルされます。なので今回C言語をコンパイルするにあたりLLVMでのClangコマンドを使っていきます。
ここまで詳細に動機を書いていきましたが用意するものとしてはmacが一台あれば上記項目は全て満たすことができます。
しかしやりたいこととしてはWindowsの方もできますので今回はWindowsの方のための環境構築を紹介しようと思います。
Windows環境でLLVMでのClangを動かす方法としてVirtual BoxでFreeBSDを動かすという方法があります。
FreeBSDはBSD と呼ばれるカリフォルニア大学バークレー校で開発された UNIX® に由来したOSです。
FreeBSDではバージョン9の頃からClangとLLVMをベースシステムにしています。
そのため古いバージョンを使わなければLLVMでのClangを使うことができます。
「LLVMでのClangを使ってC言語を学習する。」Windowsの方のための環境構築としてFreeBSDの仮想マシン作成を説明していこうと思います。
環境
WindowsのPC
仮想マシンを動かすので少し性能の高いPCだとうまくいくと思います。
どういったPCがいいのかなどお困りでしたらコメントもしくはツイッターでご連絡いただければ自分がわかる範囲でお答えできると思います。。
事前準備
Virtual Boxのインストール
こちらに関しては多くのサイトでご紹介されていますのでそちらを参照してください。
この記事ではバージョン 6.1.26 r145957 (Qt5.6.2)を使用しています。
FreeBSDの入手
下記のサイトから
FreeBSD 13.0-RELEASEの仮想マシンイメージをお使いのPC環境に合わせて選択してください。
・amd64(AMD社が開発したマイクロプロセッサ)
・i386(Intel社のマイクロプロセッサ)
・aarch64(ARM の 64 ビットアーキテクチャ)
・riscv64(RISC(Reduced Instruction Set Computing)の原理に基づいたオープンソースの命令セットアーキテクチャ(ISA))
自分環境はAMD社が開発したマイクロプロセッサを使っていますのでamd64を選択しました。
ダウンロードするファイルとしては「.vhd.xz」のようにvhdが付くファイルを選択してください。
FreeBSD仮想マシンの作成
ダウンロードした仮想マシンイメージを7zip等の解凍ツールで展開します。
Virtual Boxを開きます。「新規」をクリックします。
「名前」には好きな名前を入れてください。
「マシンフォルダー」にはとくにこだわりがなければデフォルトで大丈夫です。
「タイプ」はBSD、「バージョン」はFreeBSD(64-bit)を選択してください。
「次へ」をクリックします。
メモリーサイズは特に重い処理は行わないのでデフォルトの1024MBで大丈夫です。「次へ」をクリックします。
ハードディスクはダウンロードした仮想マシンイメージを使用します。
「すでにある仮想ハードディスクファイルを使用する」にチェックを入れ、フォルダみたいなアイコンをクリックします。
ハードディスク選択ウィンドウが表示されるので「追加」をクリックします。
エクスプローラが開くのでダウンロードした仮想マシンイメージを展開したフォルダを開いて.vhd拡張子のファイルを選択します。
(この時に拡張子が見えない場合は別のエクスプローラを開いて「表示」からファイル名拡張子にチェックを入れます。)
「開く」をクリックします。
「ハードディスク選択」ウィンドウに戻るので「選択」をクリックします。
「作成」をクリックします。
電源オフの状態で仮想マシンが作成されます。
FreeBSDの操作環境の調整
ここから操作をしやすくするための設定をします。
「設定」をクリックします。「ネットワーク」を選択し「割り当て」をホストオンリーアダプターに変更します。
この設定により仮想マシンは今操作しているPCとのみネットワーク接続されている状態になります。
「OK」をクリックします。
「起動」をクリックします。
「Enter full pathname of shell or RETURN for /bin/sh:」とでてきたら黒い画面をクリックし「キャプチャ」をクリックします。するとカーソルが吸い込まれ、操作できるようになります。
操作をやめたい場合は右CTRLを押せば解除されると思います。
操作できるようになった状態で「Enter」を押します。そのあとに「exit」と打ち込み「Enter」を押します。
そうするとまた処理が再開されると思います。
「login:」という文字が表示されたらユーザ操作可能な状態になったサインです。
「login:」の後にrootと打ち込んで「Enter」を押します。
rootユーザのパスワードを設定します。下記を実行してください。
# passwd
「New Password」に設定したいパスワードを入れます。
「Retype New Password」を聞かれるのでもう一度同じパスワードを入れます。
ここから少し難易度が上がります。
このままFreeBSDを使ってもいいのですが毎回キャプチャを聞かれたり少し操作がしづらいので、windows PowerShellからsshコマンドを使ってFreeBSDにアクセスして操作していこうと思います。
FreeBSDのほうでsshdの使用の許可を設定し、その次にsshdの設定を行います。
sshdの使用の許可
下記のコマンドを実行します。
# vi /etc/rc.conf
矢印キーを使って一番下の行まで行きます。
「iキー」を押して最終行の末尾で改行を行い、行を追加します。
追加した行に下記を書き入れます。
sshd_enable="YES"
エスケープキーで編集モードを終了させ「:wq」で保存します。
もし操作でうまくいかないもともと書いてあった記述を消してしまったなどありましたら保存はせずに下記のURLを参考にしてみてください。(保存さえしなければ編集前の状態に戻せます。)
sshdの設定
下記のコマンドを実行します。
# vi /etc/ssh/sshd_config
このファイルの操作が一番大変ですがここを乗り越えればゴール目前です。
操作としては
該当箇所を検索で見つけて、改行し設定を書き入れる。
を4回行います。
「/Port」で検索すると該当する行に行けるのでそこで改行をし下記を書き入れます。
Port 22
エスケープキーで編集モードを終了させ「/Permit」で検索し改行 下記を書き入れます。
PermitRootLogin yes
(この設定はsshでrootユーザでのログインを許可する設定です。今回はホストオンリーでつないでおり外部からのアクセスはない前提のため行っています。他環境においてこの設定にする際は自己責任でお願いします。また今回はLLVMでのclangの実行が目的のため仮想環境の安全性は担保していません。ホストオンリー以外での使用は極力避けることをおすすめします。)
エスケープキーで編集モードを終了させ「/Password」で検索し改行 下記を書き入れます。
PasswordAuthentication yes
(この設定はsshでパスワードのみでのログインを許容する設定です。今回はホストオンリーでつないでおり外部からのアクセスはない前提のため行っています。他環境においてこの設定にする際は自己責任でお願いします。また今回はLLVMでのclangの実行が目的のため仮想環境の安全性は担保していません。ホストオンリー以外での使用は極力避けることをおすすめします。)
エスケープキーで編集モードを終了させ「/Permit」で検索し改行 下記を書き入れます。
PermitEmptyPasswords no
(この設定はsshで空のパスワードを許容しない設定です。)
かなりセキュリティの低い設定でsshを行います。もし不安な方は下記のURLを参考にパスワードの設定等を行ってください。
編集が完了したら「:wq」で保存します。
これで設定が完了したので適用させるために仮想マシンを再起動します。下記のコマンドを実行してください。
# shutdown -r now
早速windows PowerShellからsshコマンドを使ってFreeBSDにアクセスしてみます。
再起動が完了し、「login:」という文字が表示されたらrootでログインし、下記のコマンドを実行します。
# ifconfig
inetの行の192.xxx.xxx.xxxをメモしておきます。
windows terminalを開きます。ない場合はmicrosoft storeからダウンロードしてください。
windows PowerShellになっていることを確認し下記を実行します。この時先程メモした192.xxx.xxx.xxxを@の後に書き入れます。
ssh root@192.xxx.xxx.xxx
接続しますか?と聞かれるのでyesと入力します。
パスワードを聞かれるのでパスワードを入力します。
うまく接続出来たら下記の画像のようになると思います。
これで構築は完了です。
FreeBSDのシャットダウン
windows PoweShellのsshでログインしている画面を使って下記のコマンドを実行します。
# shutdown -p now
Virtual BoxのFreeBSDも電源オフになると思います。これでVirtualBoxも終了させても大丈夫です。
最後に
お疲れ様でした。仮想環境を始めて構築された方は本当に大変であったと思います。「vi」や「ssh」はよく使用するコマンドですので初めての方はさらに深めても悪いことはないかと思います。
またお使いの環境によっては途中で詰まる点も多々ありますのでその際は気兼ねなくコメントしていただけたらと思います。
次回からLLVMでのClangを使ってC言語をコンパイルできたらと思います。
ここまでお読みいただきありがとうございました。