イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

centos6上にvirtualboxでcentos8環境を作りたい

はじめに

centos6上にvirtualboxでcentos8環境を作りたい。
正攻法でうまく行かなかったので、vagrantのちからを借りようとしたら
うまくできなかったので、邪道な方法で解決した。

  1. vagrantをインストール (curlを添えて)
  2. boxを追加 (curlを添えて)
  3. vagrant up
$ curl -ksSLO https://releases.hashicorp.com/vagrant/2.2.14/

# rpm -Uvh ./vagrant_2.2.14_x86_64.rpm


$ vagrant box add https://app.vagrantup.com/centos/boxes/8

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to proxy.co.jp:8080

$ vagrant plugin install vagrant-proxyconf

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to proxy.co.jp:8080

$ curl -ksSLO  https://app.vagrantup.com/centos/boxes/8/versions/2011.0/providers/virtualbox.box

$ vagrant box add centos8 ./virtualbox.box

$ vagrant init

$ vi Vagrantfile

$ vagrant up

おわりに

終始、curlしてどうにかする方法で解決した。
(時間ないときはとりあえず解決する)
proxy環境困る。。。

参考

Proxy環境下でのVagrant設定 - Qiita

Downloads | Vagrant by HashiCorp

Vagrant box centos/8 - Vagrant Cloud

virtualenvでpython環境を作る on Centos7

はじめに

python3を使いたいがcentos7はpython2.7だったりする。
新しい環境ごとにpython3環境を構築しているので、手順を記録する。

linuxコマンドがpython2.7を使っていたりするので、あんまり触りたくない。
そこで、virtualenvを用いて指定したバージョンのpythonを使用する環境を作成する。

virtualenvのインストール

virtualenvインストールするだけ。

# yum install python-virtualenv

環境で使用するpythonのインストール

virtualenv環境で使用するバージョンのpythonをインストールする。

# yum install python3

コマンドうってインストール確認する。
いや、しなくていい。

$ virtualenv --version
15.1.0

python環境の作成

ディレクトリはテキトーに掘って移動する。
virtualenvコマンドは引数に、virtualenv環境で使用するバージョンのpythonのパスと、環境名を取る。
virtualenv [option] python_binary dir_name

$ mkdir venv && cd venv
$ virtualenv -p /usr/bin/python3 py3

環境のアクティブ化、デアクティブ化

作成した環境を使用したい場合

$ . py3/bin/activate
(py3) $

作成した環境のactivateファイルを.の引数にすると、環境がアクティブになりホスト名の前に環境名が表示される。
もちろん、.sourceでもよい。
(.bashrcとか読み込むときに使うやつと同じ)
activateファイルを見に行くとbashから読み込んでね、って書いてある。
単純にactivateファイルを実行しようとする失敗をやりがち。

環境から抜ける場合

(py3)$ deactivate
$

どこでもいいのでdeactivateってうつと環境名の表示が消えて環境がデアクティブになる。

おわりに

virtualenvを用いて指定したバージョンのpythonを使用する環境を作成する手順を示した。
yum installしたときはpython27-virtualenvだったような気がする。
anacondaとかなんとかあるけど、楽ちんなのでvirtualenv結構好き。

何回目かのgit clone できない問題対応

もう何回になるかわからないけど、いつも忘れるgit cloneできないときの解決法を記録する。
よくぶち当たるのが下記の問題

  1. proxyの設定
  2. proxyのせいでSSLエラー
  3. gitバージョンが古い

proxyの設定

到達できないとき。
(たまにdnsの設定できてないとかいるけどまあ)

git config --global http.proxy http://proxy.no.address:portnumber
git config --global https.proxy https://proxy.no.address:portnumber

proxyのせいでSSLエラー

SSL certificate problem: ~が出たとき。

あんまりやりたくない

git config --global http.sslVerify false

gitバージョンが古い

401 Authorization Required while accessing ~が出たとき。
もっとやりたくないがurlにユーザ名とパスを設定すると解決する。

git clone https://username:pass@git.no.address

おわり

CentOS6のサポートが切れたのでyumの設定を変更する

はじめに

(2021/02/01更新)

CentOS6の環境にyumでソフトをインストールしようとしたらできなかったので、
泣きながら設定を変更した。

  1. vault.centos.orgを有効化
  2. CentOS-*.repoの$releaseverの値を変更

vault.centos.orgを有効化

https://vault.centos.org/

http://archives.fedoraproject.org/pub/archive/epel/

すでにサポートが切れた過去の遺産を格納する貯蔵庫を参照できるようにする。
めんどいのでmirrorをvaultで書き換えた。
大体、notfoundになったページを見に行くとreadmeにこっち見てねって書いてある気がする。

(2021/02/01更新) 下記、baseの例
updates、extrasなど使用するものは同様に変更する。

vi /etc/yum.repos.d/CentOS-Base.repo

-baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
+baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/

-gpgcheck=1
+gpgcheck=0

CentOS-*.repoの$releaseverの値を変更

vaultにはreleasever=6なんてない。
/etc/centos-release を確認したところ6.5だったので
releasever=6.5に設定する。
centos-releaseを書き換えればよいかと思ったがうまくできなかった。
なので、/etc/yum/vars/releaseverを作成して6.5と記入した。

おわりに

サポート期限を意識してOSをきちんとアップデートしよう。
一体何台になるのか計算もしたくない...

型コンストラクタのエクスポート&インポート in Haskell

はじめに

独自プロトコルで通信するサーバを作っていたら、
独自プロトコルで定義している型コンストラクタをインポートできなくてハマったので記録する。

結論

Export.hs

module MyProtocol (MyMsg(..), createMyMsg, sendMyMsg)

data MyMsg = MyMsg MyHeader MyPayload

import.hs

import Export (MyMsg(..))

何回やっても忘れるgitのリポジトリ作成fromローカルマシン

はじめに

もう何回やったかわからない、ローカルマシンからのgitのリポジトリ作成。
しかし、また忘れたので今度こそメモする。

ローカルマシン: windows10
環境: vscode
gitホストサービス: gitlab

手順

  1. ローカルリポジトリの作成
  2. ローカルリポジトリに追加するファイルの選択
  3. ローカルリポジトリにコミットする
    • ユーザ設定
  4. リモートリポジトリ作成
  5. ローカルリポジトリをリモートリポジトリへ登録

ローカルリポジトリの作成

プロジェクト用ディレクトリを作成して、そのディレクトリ内でgit initする。

$ mkdir my_project
$ cd my_project
$ git init

ローカルリポジトリに追加するファイルの選択

ローカルリポジトリに追加するファイルを選択する。
ディレクトリ内すべて追加してよければgit add .でよい。
選択したい場合は、.の代わりに追加するファイル名を指定する。
この操作はステージングするだけなので、リポジトリにファイルの変更は登録されない。

$ git add .

ローカルリポジトリにコミットする

ステージングしたファイルをローカルリポジトリにコミットする。
ルールに従ってメッセージを付与する。

$ git commit -m "iketeru message"

ユーザ設定

ユーザ設定が済んでいない旨のエラーメッセージがでたら、下記を実行して設定する。

$ git global user.email "your.name@email.com"
$ git global user.name "your name"

リモートリポジトリ作成

ローカルリポジトリの内容を登録するリモートリポジトリを作成する。
今回はgitlabを使用した。

$ git remote add origin https://host/name/of/gitlab/yourproject.git

ローカルリポジトリをリモートリポジトリへ登録

ローカルリポジトリの内容をリモートリポジトリへ登録する。
リモートリポジトリのユーザ名とパスを聞かれるので答える。
下記は、ローカルのmasterブランチをリモートのoriginへ登録している。

$ git push -u origin master

おわりに

何回も忘れたので、勢いでメモした。
理解の足りないところや間違いがあるので、後ほど修正する。

参考

  1. 新しいリポジトリを作成する|サル先生のGit入門【プロジェクト管理ツールBacklog】
  2. GitHubで新規リポジトリ作成から、PUSHまで - Qiita

Rustでmap関数を実装したかった

結論

納得いかん
引数の方を何でもにできなかった。
再帰関数を定義しようとすると、多重貸し出しになってコンパイルが通らなかった。
解決策を調査したい。

サンプルコード

fn map<T>(f: Box<dyn Fn(T) -> T>, a: &Vec<T>) -> Vec<T>
where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T>
{
        let mut b = vec![];
        for &num in a{
            b.push(f(num));
        }
        b
   
}

fn triple<T>(x: T) -> T
where T: Copy + std::ops::Add<Output = T> + std::ops::Sub<Output = T> + std::ops::Mul<Output = T> + std::ops::Div<Output = T>
{
    x * x + x - x / x 
}
fn main(){
    let mut arry1 = &vec![4, 5, 3, 2];
    let v1 = map(Box::new(triple),&mut arry1);
    println!("{:?}", v1);
}