20200305のLinuxに関する記事は8件です。

pinguy builderで自作Linuxを作ろう(2020年更新)

概要

xubuntuベースでLinuxディストリビューションを自作する方法を大まかにまとめました。大まかな流れとしては

1、仮想マシンにxubuntuをインストール

2、カスタマイズ

3、起動ロゴ、インストールスライド等の変更

4、ビルド

といった感じです。1と2に関してはここでは説明しません。適当にググって下さい..

参考サイト
http://serenelinux.html.xdomain.jp/page/customize.html
https://toshio-web.com/linux-mint-custom-iso
ありがとうございます

起動ロゴの変更

普通にplymouthテーマを変更しても良いですが
/usr/share/plymouth/themes/xubuntu-logo
ディレクトリの内容を変えても変更できます

OS名の変更

/usr/lib/os-release
上記のパスにあるファイルの PRETTY_NAME の項目を自分のOSの名前に変更します。それ以外の場所を変えると正常に作動しなくなる可能性があるので注意して下さい。

インストールスライドの変更

/usr/share/ubiquiy-slideshow/slides/
/usr/share/ubiquity-slideshow/l10n/ja/
これらのディレクトリにあるhtmlを書き変えてください。ただしhtmlファイル名は変更しないことを推奨します。変更が終わったら必ず
sudo chown -R root:root /usr/share/ubiquity-slideshow/
sudo chmod -R 755 /usr/share/ubiquity-slideshow/
を実行してファイルのアクセス権限を変更して下さい。

ビルド

ビルドの準備

https://sourceforge.net/projects/pinguy-os/files/ISO_Builder/
から pinguybuilder_x.x-x_all.deb を見つけてダウンロード、インストールします。また、xresprobeも必要です。

32bit:https://launchpad.net/ubuntu/+source/xresprobe/0.4.24ubuntu9/+build/1274264/+files/xresprobe_0.4.24ubuntu9_i386.deb

64bit:https://launchpad.net/ubuntu/+source/xresprobe/0.4.24ubuntu9/+build/1274262/+files/xresprobe_0.4.24ubuntu9_amd64.deb

からダウンロードしインストールします。

設定ファイルのコピー

/home/ユーザー名/.configディレクトリを/etc/skelにコピーします。その後コピーした/etc/skel/.config内のchromiumなどの個人情報を含むディレクトリを削除します。cpコマンドでコピーする場合は -r オプションとsudoを忘れずに。また、念の為/etc/skel内にDesktop等のディレクトリも作成します。これをやらないとデスクトップが正常に表示されない可能性があります。

いよいよビルド

さて、いよいよディストリビューションをビルドしていきます。pinguy builderをランチャーから起動させアカウントの現在のパスワードが要求されます。
メインの画面が表示されたら Settings タブに移動し設定を行います。

<Username>

現在ログインしているユーザー名を指定します。

<CD Label>

ライブCD名を指定します。ライブ起動した際のタイトルに使用されます。

<Filename>

ISOファイルのファイル名を指定します。ここでスペースなどを入れると正常にビルドできません。英数字(小文字)で設定しましょう。

<Working directory>

ISOファイルを作成するフォルダを指定します

<Files to exclude>

バックアップの対象外としたいフォルダがある場合、そのパスを指定します。

<URL for USB Creator>

よく分かりません..
デフォルトのままで問題ないです

上級者向けの詳細なオプションを指定する項目です。これもデフォルトのままです

バックアップモードの時に、デスクトップにinstallアイコンを作成する場合、チェックを入れます。

次に「Actions」タブに移動し、"Dist" をクリックします。これでビルドが開始されます。ビルドにはかなり時間がかかります。ゲームでもしながら気長に待ちましょう。

ビルドが成功すると作業ディレクトリのpinguy builderディレクトリ内にisoファイルがあります。これで完成です。お疲れ様でした!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxでユーザー空間で動作するプログラムとハードウェアがメモリを共有するためのデバイスドライバ(V4L2_MEMORY_USERPTR編)

はじめに

筆者はudmabuf をオープンソースで公開しています。

この記事では、udmabuf で確保したバッファを V4L2 バッファとして使う際の方法について説明します。

経緯

次の記事でXilinx VDMA 等を使った V4L2 ドライバで V4L2 バッファを mmap するとキャッシュが有効にならない問題を示しました。

その対策として、V4L2_MEMORY_MMAP ではなく、ユーザーアプリケーション側でバッファを確保してV4L2ドライバに V4L2_MEMORY_USERPTR で渡す方法が考えられます。しかしこの方法では上手くいかないことが Xilinx のフォーラムで示されています。

これは考えてみれば当たり前な話で、Xilinx VDMA は Scatter Gather をサポートしていないので、V4L2バッファは物理メモリ上に連続していなければなりません。ユーザー空間にバッファを確保した場合は物理メモリ上に連続されている保証はありません。このチェックに引っかかってしまったのです。

そこである方が、udmabuf を使って物理メモリ上に連続したバッファを確保して、そのバッファを mmap でユーザー空間にマッピングしてV4L2 ドライバにV4L2_MEMORY_USERPTR で渡す方法を試みました。残念ながら、当初は上手くいかなくて udmabuf に issue をくださいました。

最終的にはこの試みは成功したようです。1920x1080p NV12 の画像データを転送するのに、V4L2_MEMORY_MMAP だと 24msec かかっていたのが、udmabuf + V4L2_MEMORY_USERPTR だと 1.6msec になったそうです。

使用例

ここでは例に基づいてudmabuf で確保したバッファを V4L2 バッファとして使う際の方法を説明します。

udmabuf の準備

udmabuf は Linux のカーネルモジュールです。udmabuf のビルドおよびインストールは udmabuf の Readm.md などの資料を参考にしてください。

udmabuf の open

udmabuf をオープンします。

udmabuf.hpp
    name  = device_name;
    sprintf(file_name, "/dev/%s", name.c_str());
    if ((_device_file = open(file_name, O_RDWR)) < 0) {
        printf("Can not open %s\\n", file_name);
        _status = false;
        goto done;
    }

udmabuf の mmap

udmabuf を mmap でユーザー空間にマッピングします。

udmabuf.hpp
    buf = mmap(NULL, buf_size, PROT_READ|PROT_WRITE, MAP_SHARED, _device_file, 0);
    if (buf == MAP_FAILED) {
        printf("Can not mmap %s\\n", file_name);
        _status = false;
        goto done;
    }

udmabuf のクリア

実はこの処理がとても重要で欠かせません。というのも、udmabuf はオンデマンドページングによって仮想アドレスに物理メモリをマッピングします。もう少し詳しく説明すると、udmabuf は mmap() ですぐに仮想アドレスに物理メモリをマッピングするわけではありません。仮想アドレスに対してなんらかのアクセスを行った際に、物理メモリがマッピングされていなければページフォールトが発生します。udmabuf はページフォールトが発生したときに初めて物理メモリをマッピングします。

udmabuf の場合は mmap() によって返された仮想アドレスにはまだ物理アドレスがマッピングされていないので、この仮想アドレスを V4L2 デバイスに渡すと『Buffer from UDMABUF and V4L2_MEMORY_USERPTR #38』で示されたようなエラーが発生します。

これを防ぐためには、mmap() 直後にバッファをクリアするのが良いでしょう。バッファに書き込みすることによって、ページフォールトを発生させて、仮想アドレスに物理メモリをマッピングします。

udmabuf.hpp
    // Write once to allocate physical memory to u-dma-buf virtual space.
    // Note: Do not use memset() for this.
    //       Because it does not work as expected.
    {
        uint64_t*   word_ptr = reinterpret_cast<uint64_t*>(buf);
        size_t      words    = buf_size/sizeof(uint64_t);
        for(int i = 0 ; i < words; i++) {
            word_ptr[i] = 0;
        }
    }

バッファクリアの際に、memset() を使ってはなりません。memset() はとても複雑なことをしていて思い通りの結果を得ることが出来ません。

将来は udmabuf 内部でこのような処理をすることを検討しています。それまでは、この使用例のように明示的にバッファをクリアしてください。

V4L2 ドライバにV4L2バッファを要求

V4L2 ドライバに対して V4L2 バッファを要求します。その際、 V4L2 バッファは V4L2 ドライバが確保するのではなくユーザープログラムが確保したものを使うことを示すために、req.memory には V4L2_MEMORY_USERPTR を指定します。

example.cpp
    v4l2_requestbuffers req ;
    memset(&req, 0, sizeof(req));
    req.count = num_buf;
    req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    req.memory = V4L2_MEMORY_USERPTR;
    ret = xioctl(fd, VIDIOC_REQBUFS, &req);
    if (ret < 0) {
        perror("ioctl(VIDIOC_REQBUFS)");
        return -1;
    }

V4L2 ドライバにV4L2バッファをエンキュー(enqueue)

ストリーミングを開始するに先立って、V4L2 ドライバのキューに V4L2 バッファをエンキューします。buf.m.userptr に udmabuf で確保したバッファの物理メモリをマッピングした仮想アドレスを設定しています。

example.cpp
    for (i = 0; i < num_buf; i++) {
        v4l2_buffer buf;
        memset(&buf, 0, sizeof(buf));
        buf.type    = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        buf.memory = V4L2_MEMORY_USERPTR;
        buf.index = i;
        buf.length = buf_size;
        buf.m.userptr = reinterpret_cast<unsigned long>(udmabuf.buf + i*buf_size);
        ret = xioctl(fd, VIDIOC_QBUF, &buf);
        if (ret < 0) {
            perror("ioctl(VIDIOC_QBUF)");
            return -1;
        }
    }

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VirtualBox(vagrant)上のCentOS7にVirtualBoxをインストールする

VirtualBox(vagrant)上のCentOS7で、kubernetes(minikube)を動かそうとしたときに、CentOS7にVirtualBoxをインストールする必要がありました。

その時の手順を記載しておこうと思います。

yumリポジトリをCentOSに追加

以下の公式サイトのページを参考に、VirtualBoxのyumリポジトリをCentOSに追加します。

※公式サイトのページ:https://www.virtualbox.org/wiki/Linux_Downloads
 「RPM-based Linux distributions」セクションの最下部をご覧ください。

$ sudo wget https://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -O /etc/yum.repos.d/virtualbox.repo

改竄有無チェック用の公開鍵をCentOSにインポート

先ほどの公式サイトのページには

Note that importing the key is not necessary for yum users (Oracle Linux/Fedora/RHEL/CentOS) when using one of the virtualbox.repo files from below as yum downloads and imports the public key automatically!

(Google翻訳)yumは公開キーを自動的にダウンロードしてインポートするため、下からvirtualbox.repoファイルのいずれかを使用する場合、yumユーザー(Oracle Linux / Fedora / RHEL / CentOS)にはキーをインポートする必要はありません。

と書かれていますが、実際にはそんなことはありません。

なぜなら、後ほどインストール可能なバージョンを確認するために

yum list |grep Virtual

をする必要があり、事前に改竄有無チェックのための公開鍵がCentOSにインポートされている必要があるからです。なので、この公開鍵のインポートは結局必要となります。
(もちろん、インストール可能なバージョンが事前に分かっている場合はこの限りではありません。)

公式サイトに記載されている通り、公開鍵をインポートします。

wget https://www.virtualbox.org/download/oracle_vbox.asc
sudo rpm --import oracle_vbox.asc

VirtualBoxをインストール

インストール可能なVirtualBoxのバージョンを確認します。

$ yum list |grep Virtual

VirtualBox-4.3.x86_64                       4.3.40_110317_el7-1        virtualbox
VirtualBox-5.0.x86_64                       5.0.40_115130_el7-1        virtualbox
VirtualBox-5.1.x86_64                       5.1.38_122592_el7-1        virtualbox
VirtualBox-5.2.x86_64                       5.2.38_136252_el7-1        virtualbox
VirtualBox-6.0.x86_64                       6.0.18_136238_el7-1        virtualbox
VirtualBox-6.1.x86_64                       6.1.4_136177_el7-1         virtualbox

最新版をインストールします。

sudo yum install VirtualBox-6.1.x86_64

カーネルモジュールをインストール

virtualboxが動くか確認してみましょう。

$ virtualbox

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (3.10.0-957.12.2.el7.x86_64) or it failed to
         load. Please recompile the kernel module and install it by

           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.
Qt FATAL: QXcbConnection: Could not connect to display 
Aborted

エラーとなってしまいました。エラメッセージにsudo /sbin/vboxconfigを実行せよ、と書いてありますので、素直に実行してみます。

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

エラーとなりました。エラーメッセージを見てみると、

Please install the gcc make perl packages from your distribution.

とのことなので素直にインストールします。

$ sudo yum install gcc make perl

さらに、エラーメッセージには以下の記載もありました。

Please install the Linux kernel "header" files matching the current kernel for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

kernel-develが無いということなので、こちらも素直にインストールします。

$ sudo yum install kernel-devel

設定を有効にするためにCentOSを再起動して、リトライです。(再起動は不要なのかもしれません)

$ sudo /sbin/vboxconfig

Please install the Linux kernel "header" files matching the current kernel for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

あれ?「kernel-devel」が無い、ということで、同じエラーです。

SELinuxが関係してるのかなと思い、SELinuxをDisabledにしてみたのですが、状況は変わりませんでした。

色々と調べてみると、CentOSのkernelのバージョンに対応するkernel-develがインストールされていないことが原因のようでした。

$ sudo yum install kernel-devel

としてしまうと、最新版のkenel-develがインストールされてしまいます。最新版のkenel-develは、CentOSのkernelのバージョンと整合性が無いので、エラーが起きてしまったのです。

詳しくは以下の解説をご覧ください。大変参考になります。こちらに記載の手順を実施して、CentOSのkernelのバージョンと整合性があるkernel-develをインストールしましょう。
 https://qiita.com/metheglin/items/60261f474ccdfb467574

その後、リトライしてみます。

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.

やっとうまくいきました!

おまけ

今回は、macのVirtualBox上でCentOS7を動かし、そのCentOS上でVirtualBoxを動かそうとしていました。それによって、CentOS上でkubernetes(minikube)を動かそうとしました。

こういったVMの中でさらにVMを動かす、ということを「ネステッドVM」と呼びます。

しかし、このネステッドVMは、macのVirutualBoxでは使えませんでした。AMDのCPUしか対応してないらしく、macのIntel CPUでは使えないとのこと。せっかく本記事のように頑張ったのに、残念でした・・・。

VirtualBox上のCentOS7でkubernetesを動かすのは諦めて、mac上で動かしてみることにしました(おわり)。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VirtualBox(mac+vagrant)上のCentOS7にVirtualBoxをインストールする

VirtualBox(mac+vagrant)上のCentOS7で、kubernetes(minikube)を動かそうとしたときに、CentOS7にVirtualBoxをインストールする必要がありました。

その時の手順を記載しておこうと思います。

yumリポジトリをCentOSに追加

以下の公式サイトのページを参考に、VirtualBoxのyumリポジトリをCentOSに追加します。

※公式サイトのページ:https://www.virtualbox.org/wiki/Linux_Downloads
 「RPM-based Linux distributions」セクションの最下部をご覧ください。

$ sudo wget https://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -O /etc/yum.repos.d/virtualbox.repo

改竄有無チェック用の公開鍵をCentOSにインポート

先ほどの公式サイトのページには

Note that importing the key is not necessary for yum users (Oracle Linux/Fedora/RHEL/CentOS) when using one of the virtualbox.repo files from below as yum downloads and imports the public key automatically!

(Google翻訳)yumは公開キーを自動的にダウンロードしてインポートするため、下からvirtualbox.repoファイルのいずれかを使用する場合、yumユーザー(Oracle Linux / Fedora / RHEL / CentOS)にはキーをインポートする必要はありません。

と書かれていますが、実際にはそんなことはありません。

なぜなら、後ほどインストール可能なバージョンを確認するために

yum list |grep Virtual

をする必要があり、事前に改竄有無チェックのための公開鍵がCentOSにインポートされている必要があるからです。なので、この公開鍵のインポートは結局必要となります。
(もちろん、インストール可能なバージョンが事前に分かっている場合はこの限りではありません。)

公式サイトに記載されている通り、公開鍵をインポートします。

wget https://www.virtualbox.org/download/oracle_vbox.asc
sudo rpm --import oracle_vbox.asc

VirtualBoxをインストール

インストール可能なVirtualBoxのバージョンを確認します。

$ yum list |grep Virtual

VirtualBox-4.3.x86_64                       4.3.40_110317_el7-1        virtualbox
VirtualBox-5.0.x86_64                       5.0.40_115130_el7-1        virtualbox
VirtualBox-5.1.x86_64                       5.1.38_122592_el7-1        virtualbox
VirtualBox-5.2.x86_64                       5.2.38_136252_el7-1        virtualbox
VirtualBox-6.0.x86_64                       6.0.18_136238_el7-1        virtualbox
VirtualBox-6.1.x86_64                       6.1.4_136177_el7-1         virtualbox

最新版をインストールします。

sudo yum install VirtualBox-6.1.x86_64

カーネルモジュールをインストール

virtualboxが動くか確認してみましょう。

$ virtualbox

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (3.10.0-957.12.2.el7.x86_64) or it failed to
         load. Please recompile the kernel module and install it by

           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.
Qt FATAL: QXcbConnection: Could not connect to display 
Aborted

エラーとなってしまいました。エラメッセージにsudo /sbin/vboxconfigを実行せよ、と書いてありますので、素直に実行してみます。

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

エラーとなりました。エラーメッセージを見てみると、

Please install the gcc make perl packages from your distribution.

とのことなので素直にインストールします。

$ sudo yum install gcc make perl

さらに、エラーメッセージには以下の記載もありました。

Please install the Linux kernel "header" files matching the current kernel for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

kernel-develが無いということなので、こちらも素直にインストールします。

$ sudo yum install kernel-devel

設定を有効にするためにCentOSを再起動して、リトライです。(再起動は不要なのかもしれません)

$ sudo /sbin/vboxconfig

Please install the Linux kernel "header" files matching the current kernel for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.2.el7.x86_64

あれ?「kernel-devel」が無い、ということで、同じエラーです。

SELinuxが関係してるのかなと思い、SELinuxをDisabledにしてみたのですが、状況は変わりませんでした。

色々と調べてみると、CentOSのkernelのバージョンに対応するkernel-develがインストールされていないことが原因のようでした。

$ sudo yum install kernel-devel

としてしまうと、最新版のkenel-develがインストールされてしまいます。最新版のkenel-develは、CentOSのkernelのバージョンと整合性が無いので、エラーが起きてしまったのです。

詳しくは以下の解説をご覧ください。大変参考になります。こちらに記載の手順を実施して、CentOSのkernelのバージョンと整合性があるkernel-develをインストールしましょう。
 https://qiita.com/metheglin/items/60261f474ccdfb467574

その後、リトライしてみます。

$ sudo /sbin/vboxconfig

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.

やっとうまくいきました!

おまけ

今回は、macのVirtualBox上でCentOS7を動かし、そのCentOS上でVirtualBoxを動かそうとしていました。それによって、CentOS上でkubernetes(minikube)を動かそうとしました。

こういったVMの中でさらにVMを動かす、ということを「ネステッドVM」と呼びます。

しかし、このネステッドVMは、macのVirutualBoxでは使えませんでした。AMDのCPUしか対応してないらしく、macのIntel CPUでは使えないとのこと。せっかく本記事のように頑張ったのに、残念でした・・・。

VirtualBox上のCentOS7でkubernetesを動かすのは諦めて、mac上で動かしてみることにしました(おわり)。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[squidでhttpsプロキシ] 中間CA証明書をチェインしていないwebサーバへアクセスしたときのエラーを解消する。

はじめに

sslインターセプトするhttpsプロキシを運用していて、不具合があった点が解消できましたので、記録します。
利用する環境は、前回構築した以下のものです。
squidでActiveDirectory連携とSSLインターセプトするProxyをdockerで手軽につくる

なにが起こったのか

以下のサイトに接続しようとすると、エラーが発生。
https://learningnetwork.cisco.com/s/

証明書の発行元が不明なためエラーとなっている様子。
うまくチェインがたどれないのであろう。
Screenshot from Gyazo

原因調査

ログ調査

ログを見ると、squidがサーバ証明書を受け取る際に、不足した中間CA証明書を取得しようとして、DENIEDされている。
そのせいで証明書ベリファイできてない(=チェーンがたどれない)みたいだ。

squid_access.log
 TCP_DENIED/407 4118 CONNECT learningnetwork.cisco.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4488 CONNECT learningnetwork.cisco.com:443 - HIER_NONE/- text/html
 NONE/200 0 CONNECT learningnetwork.cisco.com:443 PROSPER2\\USERNAME HIER_NONE/- -
 TCP_DENIED/407 3616 GET http://trust.quovadisglobal.com/hydsslg2.crt - HIER_NONE/- text/html;charset=utf-8
 TCP_MISS/503 7165 GET https://learningnetwork.cisco.com/s/jp-cln PROSPER2\\USERNAME HIER_DIRECT/161.71.178.161 text/html
squid_cache.log
kid1| ALE missing IDENT
kid1| ERROR: negotiating TLS on FD 23: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed (1/-1/0)

squidの4以降では、中間証明書を自動的に取得してくれる機能がついているようなのですが。。。

Squid-4 is capable of downloading missing intermediate CA certificates, like popular browsers do.

出典:https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit#Missing_intermediate_certificates

ログから確認できた通り、証明書を取得するためのURLへの通信が許可されていないため、うまく動作していないようだ。

実際に証明書を取得してみる

learningnetwork.cisco.comの場合

証明書を取得してみたところ、チェーンがたどれるようにCAの証明書を付けてくれてないみたい。

#  openssl s_client -connect learningnetwork.cisco.com:443 -showcerts | grep [si]:
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
verify error:num=21:unable to verify the first certificate
verify return:1
 0 s:C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
   i:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2

cisco.comの場合

こちら側は、ちゃんとチェーンがたどれるようにしてくれてるのに。。。

#  openssl s_client -connect www.cisco.com:443 -showcerts | grep [si]:
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
verify return:1
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = www.cisco.com
verify return:1
 0 s:C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = www.cisco.com
   i:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
 1 s:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
   i:C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2

解決方法

つまり、取得できなかった中間CA証明書が取得できるようになればよい、ということのはず。

解決方法その1

ホワイトリストに中間証明書を取得するURLを追加する。

whitelist
^(https*://)*([^/][^/]*\.)*quovadisglobal\.com(:443|:80)*(/.*)*$

解決方法その2

squidのサーバに欠落対象となる中間CA証明書を保管しておいて、外部の中間CAとしてその証明書を指定する。
squidはDERの証明書が利用できないぽい(?)ので、PEMにして保管します。

# curl -L http://trust.quovadisglobal.com/hydsslg2.crt --output - | openssl x509 -inform DER > /etc/squid/certs/ca3rd/hydsslg2.crt

squid.conf で取得した証明書を指定します。

squid.conf
sslproxy_foreign_intermediate_certs /etc/squid/certs/ca3rd/hydsslg2.crt

これでうまく見れるようになった。

Screenshot from Gyazo

出典

以下の参考にさせていただきました。
opensslコマンドの使い方
https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[linux] sudo su しようとしたら /usr/local/bin/zsh を実行できなとき

はじめに

sudoでコマンドが見つかりませんになったので
suしてrootユーザのパスを設定しようと思ったら拒否られたので調べました

原因

bashからzshに移行したさいに手違いでrootのデフォルトシェルが/usr/local/bin/zshになってしまったか、そもそもrootシェルの設定をしてないが原因とみられる

rootパスを設定していないので、chshでrootシェルを設定できるはずがない!

実際のパス
❯ echo $SHELL                                      
/usr/bin/zsh

まずシェルを変更する

sudo chsh root -s /usr/bin/zsh

認証失敗のとき

sudo chsh root -s /usr/bin/zsh
chsh: PAM: 認証失敗

/etc/pam.d/chshを編集してシェルを変更できるようにする。

#
# The PAM configuration file for the Shadow `chsh' service
#

# This will not allow a user to change their shell unless
# their current one is listed in /etc/shells. This keeps
# accounts with special shells from changing them.


# ここをコメントアウトする
# auth       required   pam_shells.so

この状態でもう一度sudo chsh root -s /usr/bin/zshすれば変更できる。
変更できたら、コメントコメントアウトした行を元にもどす。

rootパスを変更する

$ sudo su -
$ passwd root

新しい UNIX パスワードを入力してください: xxx
新しい UNIX パスワードを再入力してください: xxx
passwd: パスワードは正しく更新されました

$ exit
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

T1310M3でオンボードRAIDを構築してCent OS7.7を入れる

知っている人には常識なんでしょうが、ドライバを入れないと認識しないところでハマりました。

1.Bios画面でRAIDをONにしてSave&Exit
2.https://docs.oracle.com/cd/E59941_01/html/E59783/z40000081016142.html
  を見ながら、オンボードRAID構成を実施

3.重要:2で作った論理ドライブはCentOS7.7のインストーラで認識できないので、ドライバを入れる必要がある。
4.https://support.ts.fujitsu.com/IndexDownload.asp?lng=COM で、RHEL7.7のSATA RAID RHDUP driver package megasr2 18.02.2019.0603.4fts-2.el7.7 for RHEL7.7をダウンロード
5.上記ドライバをDDWinなどを用いて、USBメモリに焼く

6.CentOS7.7のインストーラUSBと、ドライバを入れたUSBを両方入れる。

7.インストール画面が出たら、https://qiita.com/heimaru1231/items/5c65d98570b996510e77の「UEFIブートによってCentOSをインストールする場合」を参考に、ドライバを入れたUSBのロードを指定する。ドライバが読み込まれたらcで続けると、通常のCentOSGUIインストーラが立ち上がる。

8.作成した論理ドライブを指定してインストール実施

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[teeコマンド]一般ユーザーでroot権限が必要なファイルを書き換える時のコマンド

状況

書き込み権限のないユーザーでファイルをvimで書き換えようとして。

Can't open file for writing
Press ENTER or type command to continue

と怒られる。

rootユーザーに切り替えて編集し直しても良いんだけど。
という時。

コマンド

:w !sudo tee %

:w! (内容を保存)
sudo tee (rootユーザーで結果の出力をファイルに書き込む)
% (現在読み込まれているバッファのファイルへのパス)

※sudo可能なユーザであること前提

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む