投稿

CentOS 7にGuest Additionsをインストールし、VirtualBoxの共有フォルダーを設定した

イメージ
Follow @venividivici830 VirtualBoxで、ゲストOSのCentOS 7と、ホストOSのMac間で、共有フォルダーを設定した。 VirtualBoxのバージョンは、Version 5.2.20 r125813 (Qt5.6.3)。 CentOS 7のバージョンは、CentOS Linux release 7.6.1810 (Core)で、Minimal ISOからインストールしたもの。 Guest Additionsのインストール 共有フォルダーの設定には、Guest Additionsのインストールが必要 なので、 Install VirtualBox Guest Additions in CentOS, RHEL & Fedora を参考に、Guest Additionsをインストールした。 最初に、Guest Additionsのインストールに必要なパッケージの取得や、環境変数の設定を実施。 # EPELリポジトリーを追加 yum -y install epel-release # yumパッケージを最新にする yum -y update # いったん再起動 reboot # Guest Additionsのインストールに必要なパッケージをインストール yum -y install make gcc kernel-headers kernel-devel perl dkms bzip2 # KERN_DIR環境変数の設定、export export KERN_DIR=/usr/src/kernels/$(uname -r) 次に、VBoxGuestAdditions.isoをmountした。 Guest Additionsは、このISOからインストールする。 Virtualboxのメニューバーの下記のボタンから、仮想的なCDを挿入。 Devices > Insert Guest Additions CD image... 設定が変更された〜旨のダイヤログが表示されたので、「設定を再読み込み」を選択した。 下記のコマンドで仮想的なCDをmountし、Guest Additionsをインストールした。 # Guest Additions CD imageの...

Cにおける文字列の配列 - charの二次元配列と、charのポインターのポインターの違い -

Follow @venividivici830 charの二次元配列と、charのポインターのポインターは、どちらも文字列の配列として利用できる。 しかし、両者は同じではない。 違いがわからなかったため、以下に整理した。 charの配列と、charのポインター 先に、より簡単な、charの配列と、charのポインターについて整理した。 charの配列も、charのポインターも、文字列として扱える。 #include <stdio.h> int main() { // charの配列 char name_a[] = "john lennon"; printf("%s\n", name_a); // charのポインター char *name_p = "paul mccartney"; printf("%s\n", name_p); return 0; } 実行結果 john lennon paul mccartney (下記コードのname_p = name_aのように)配列をindex指定なしで使うと、配列の先頭要素のアドレスとして扱われる。  このため、アドレスを格納するための型であるcharのポインターに代入できる。 しかし、配列の先頭要素のアドレスは変更できない仕様のため、charのポインターを配列に(先頭要素のアドレスとして)代入することはできない。 #include <stdio.h> int main() { char name_a[] = "john lennon"; char *name_p = "paul mccartney"; /* * index指定なしだと、配列は、配列の先頭要素のアドレスとして扱われる * よって、下記の2つは同じ値を出力する */ printf("%p\n", &name_a[0]); /* &は、変数のアドレスを取得する演算子 */ printf("%p\n", name_a); /* * 配列の先頭要素の「アドレス」なので、c...

VirtualBoxのCentOS 7にDocker Community Editionをインストールした

macOS上のVirtualBox上のCentOS 7に、Docker Community Edition (CE)をインストールした。 インストール後、centosとhttpdのDockerイメージからコンテナーを起動させ、基本的なコマンドを試した。 環境は、 macOS Mojave バージョン10.14.1 VirtualBox 5.2.20 r125813 (Qt5.6.3) CentOS Linux release 7.6.1810 (Core) docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-cli.x86_64 1:18.09.1-3.el7 containerd.io.x86_64 1.2.2-3.el7 インストールのマニュアル dockerのサイト に行き、Resources→Docs→Get Docker 遷移したページ のSupported platforms→CentOS Get Docker CE for CentOSというページ に飛ぶので、手順に従いインストールした インストール 必要なパッケージをyumでインストールする。 必要なパッケージは、yum-utils、device-mapper-persistent-data、lvm2。 # yum install -y yum-utils \   device-mapper-persistent-data \   lvm2 yum-config-managerで、stable repositoryを設定。 yum-config-managerは、上記でインストールしたyum-utilsに含まれているらしい。 # yum-config-manager \     --add-repo \     https://download.docker.com/linux/centos/docker-ce.repo 下記が表示されたので、追加された様子。 repo saved to /etc/yum.repos.d/docker-ce.repo 下記コマンドで、Docker CE と conta...

JavaScriptのthis参照について

イメージ
Follow @venividivici830 JavaScriptのthisは、関数の呼ばれ方によって、参照するオブジェクトが異なる。ただし、アロー関数はこの限りではない。 呼び出し方 参照 普通の関数呼び出し グローバルオブジェクト メソッドとして呼び出し レシーバーオブジェクト 明示的に指定 指定したオブジェクト コンストラクターとして呼び出し インスタンス イベントハンドラー/リスナーとして呼び出し イベントの発火元オブジェクト 普通の関数として呼ばれた場合、メソッドとして呼ばれた場合、明示的に指定した場合 main.js function test () { console . log ( 'this === global' ); console . log ( this === global ); console . log ( 'this === obj' ); console . log ( this === obj ); console . log ( 'this === obj2' ); console . log ( this === obj2 ); console . log ( '' ); } var obj = { test: test }; var obj2 = {} console . log ( '***** test() *****' ); test (); console . log ( '***** obj.test() *****' ); obj . test (); console . log ( '***** (test.bind(obj2))() *****' ); ( test . bind ( obj2 ))(); $ node main.js   ***** test() ***** this === global true this === obj false this =...

Node.jsのモジュール機能について

Follow @venividivici830 Node.jsのモジュール機能について学習した。 モジュール機能は、サーバーサイドJavaScriptの標準APIの仕様を定めるプロジェクトであるCommonJSでも、早い時期から規格化と実装が進んでいたようだ。 モジュールは、プログラムのソース・ファイルを複数ファイルに分けて管理し、名前空間を分離することを可能にする、Node.js自体が提供する言語機能である。 Nodeのバージョンは、 $ node -v v10.9.0 モジュールのエクスポートとインポート 下記の構成で、2つのファイルを使って検証した。 $ pwd /Users/ user /Desktop/node_test $ ls   Animal.js main.js まずは、モジュールとして利用される側。 moduleという名前のオブジェクトが、最初から存在する。 moduleオブジェクトのexportsプロパティが参照するオブジェクトのプロパティに、エクスポートするオブジェクトを設定することで、オブジェクトをエクスポートできる。 Animal.js var Animal = function () {} module . exports . Animal = Animal ; モジュールとして利用する側は、require関数を使う。 require関数の引数には、ファイル名を指定する。ファイル名の.jsは省略できる。 main.js var lib = require ( './Animal' ) var animal = new lib . Animal (); 当然下記のようにも書ける。 var Animal = require ( './Animal' ). Animal ; var animal = new Animal (); 実行すると、特にエラーなく処理が終了する。 $ node main.js   モジュールは、デフォルトでグローバルの名前空間を汚染しない。 下記のよう...

JavaScriptのプロトタイプ継承について

イメージ
Follow @venividivici830 JavaScriptのプロトタイプ継承について、以下にまとめた。 下記の本に詳細に書かれており、非常に参考になった。 パーフェクトJavaScript (PERFECT SERIES 4) 井上 誠一郎  (著), 土江 拓郎 (著), 浜辺 将太 (著) 勉強中のため、間違いがあれば指摘をいただけると幸いである。 プロトタイプ継承とプロトタイプチェーン プロトタイプ継承は、下記のように定義できると思う。 コンストラクターのprototypeプロパティが参照するオブジェクトのプロパティが、インスタンスに継承される仕組み これにより、効率的なインスタンスメソッドの実装や、Javaのような継承を実装できる。 下記のJavaScriptの仕様を利用している。 コンストラクターは、関数である 関数は、オブジェクトである 全ての関数は、prototypeという名前のプロパティを持つ 全てのオブジェクトは、オブジェクト生成に使ったコンストラクターのprototypeプロパティが参照するオブジェクトへの隠しリンク(暗黙リンク)を持つ オブジェクトのプロパティが読み込まれる時は、プロパティは下記の順で探される。この仕様が、プロトタイプチェーンである。 オブジェクト自身のプロパティ 暗黙リンク先のオブジェクトのプロパティ 暗黙リンク先のオブジェクトの、暗黙リンク先のオブジェクトのプロパティ これを繰り返し、Object.prototypeが参照するオブジェクトで終わる 上述した内容を図で表すと、下図のようになる。 上図により、インスタンスメソッドを定義する下記のコードや、 var Person = function ( name ) { this . _name = name ; } Person . prototype . getName = function () { return this . _name ; } 継承する際の下記のコードについて、理解が深まると思う。 var Dog = function () {} Dog . protot...

SquidのDigest認証でパスワードファイルをハッシュ化する

イメージ
Follow @venividivici830 SquidでDigest認証(ダイジェストにんしょう)を設定した話。 「squid digest認証」などで検索すると、パスワードファイルにパスワードを平文として記載する例が多くヒットする(日本語のページの話)。 それだとBasic認証とたいして変わらない気がするので、パスワードファイルをハッシュ化(暗号化)しても、Digest認証できるようにした。 結論としては、squid.confのauth_param digest programで指定する認証用のコマンドで、-cオプションを付ければよかった。 auth_param digest program /usr/lib64/squid/digest_file_auth -c path_to_password_file 前提条件 プロキシサーバーは、Virtualbox バージョン 5.2.12 r122591上のCentOS-7 (1804)にインストールした、Squid Cache: Version 3.5.20。 プロキシのクライアントは、macOS High Sierra バージョン 10.13.5。 CentOSのネットワークは設定済 。 CentOSとmacOSは、同一ネットワーク192.168.11.0/24に所属し、CentOSのIPアドレスは192.168.11.77。 以下、プロンプトが#の場合は、CentOSのrootユーザー、$の場合は、macOSの一般ユーザー。 Squidのインストール〜疎通確認まで CentOS 7にsquidをyumでインストールした。 # yum -y install squid インストール後、squidの設定ファイル(デフォルトで/etc/squid/squid.conf)を編集。 # vi /etc/squid/squid.conf 筆者の自宅のネットワークは、ネットワークアドレスが192.168.11.0/24のため、下記の部分を、 acl localnet src 10.0.0.0/8     # RFC1918 possible internal network acl localnet src 172.16....