2019年8月27日 星期二

Error while loading shared libraries: libxxx.so.3: cannot open shared object file: No such file or directory

Typically, it will check /lib, /usr/lib as default library folder while running.

But if your program is using library from another folder,
you should specify it use -L option in gcc:
gcc -Wall hello.c -L/usr/local/lib/x86_64-linux-gnu -lhello -o hello

It will load libhello.so in /usr/local/lib/x86_64-linux-gnu folder

But I still get error after running above command.
To fix it:
$ sudo ldconfig /usr/local/lib/x86_64-linux-gnu

Then build again, it can run successfully.

2019年8月26日 星期一

Install pip3 on ubuntu16.04

1. Get get-pip.py on https://bootstrap.pypa.io/get-pip.py

2. Run sudo python3.5 get-pip.py --prefix=/usr/local/
    It will install pip packages in /usr/local folder

3. Then you can check packages are up-to-date by command:
    pip install --upgrade pip setuptools wheel

Reference:
https://packaging.python.org/tutorials/installing-packages/#requirements-for-installing-packages

2019年8月19日 星期一

Usage of Linux csplit

csplit是將一個文件分成數個小區塊的工具

如果有個檔案text內容為:
  Title 1
  aaa
  bbb

  Title 2
  ccc
  ddd

  Title 3
  eee
  fff

想根據"Title"來分段:
$ csplit text -s -f title -b "%02d.log" /Title/ {*}

-s: 靜默模式
-f: 產生的檔名的前綴, 這邊為titlexxx
-b: 產生的檔名的後綴, 這邊為xxx00.log
/Title/: Parse用來分段的pattern
{*}: 執行pattern的次數, {1}為找一次, *為找到沒有為止

執行結束後會產生幾個檔案:
title00.log title01.log title02.log title03.log

通常會發現第一個檔案(title00.log)是空的
因為第一個檔案存的是第一個Title之前的資料,
如果text內容如下:
  zzz
  Title 1
  aaa
  bbb
  ...

那title00.log內容就會是zzz

其他依序如下
title01.log:
  aaa
  bbb

title02.log:
  ccc
  ddd

title03.log:
  eee
  fff

注意檔案內容不會包含pattern

2019年8月3日 星期六

[工作] Setup docker image時出現no space

最近發現在setup docker時會出現no space然後失敗

稍微查了一下發現
docker setup後會存放在/var/lib/docker目錄下
這個目錄占了我大概70G的空間(setup許多docker的結果)
而我的kernel只分配100G左右
幾乎被占滿了

目前好像沒有好方法
只能盡量把沒用到的image刪一刪了

還有之後有用docker的話
重新建系統可能考慮把root空間加大了

2019年7月23日 星期二

[工作] iSCSI配置 並搭配OCFS2達到多台共享

前陣子實驗了一下iSCSI, 做個筆記
以下都是最陽春的配置

iSCSI主要分為target跟initiator
iSCSI target: 分享空間資源(server)
  Package: sudo apt install tgt

iSCSI initiator: 連到target並且使用資源(client)
  Package: sudo apt install open-iscsi

Target配置:
裝完package後, 修改config
# vim /etc/tgt/targets.conf

ex.
<target iqn.2019-07.ric.builder1:builderiscsi>  
    backing-store /dev/nvme0n1   
</target>

這裡我使用的iqn為: iqn.2019-07.ric.builder1:builderiscsi
並且加入一顆磁碟到target

然後重啟服務
# systemctl restart tgt

使用command查看狀態, 看看新增的target有沒有被加入
(同常為LUN1 ~ LUNX)
#tgt-admin --show

沒問題的話target設定完成

Ininiator配置:
一樣裝完package後, 修改config
修改initiator的iqn, 每個initiator必須唯一
# vim /etc/iscsi/initiatorname.iscsi

ex.
InitiatorName=iqn.2019-07.ric:iscsi

接下來做discovery, 偵測target
# iscsiadm -m discovery -t sendtargets -p 192.168.100.254
192.168.100.254:3260,1  iqn.2019-07.ric.builder1:builderiscsi

偵測完後開始進行連線
# iscsiadm -m node -T iqn.2019-07.ric.builder1:builderiscsi --login

登入後cat /proc/partition或是fdisk -l會看到多的device,
可以對它做fdisk跟mkfs, 切partition跟建立filesystem
注意第一台initiator做完之後其他台就不用做了

接下來就能使用這個檔案系統了
ex.
mount /dev/sdb1 /mnt/test

使用上有幾個問題:
1. initiatorA新增檔案後, initiatorB並不會馬上看到檔案,
    需要umount後再mount才看得到
2. initiatorA跟initiatorB同時寫入檔案,
    有很大的機會發生檔案毀損

因為SAN本身設計並不是用來共享檔案的,
iSCSI意思是SCSI protocol over IP,
對每個initiator來說就是多一個SCSI硬碟做讀寫,
並不會知道其他initiator做了什麼事

解決方案: 透過clustered filesystem
這裡透過OCFS2來處理,
OCFS2透過daemon監控每個node的狀態,
達到node間同步跟避免同時寫入時造成毀損

Package: ocfs2-tools ocfs2-tools-dev

裝完package後, 一樣編輯config
# vim /etc/ocfs2/cluster.conf
ex.
cluster:
        node_count = 2
        name = ocfs2

node:
        number = 0
        cluster = ocfs2
        ip_port = 7777
        ip_address = 192.168.100.2
        name = machine1

node:
        number = 1
        cluster = ocfs2
        ip_port = 7777
        ip_address = 192.168.100.3
        name = machine2

其中name必須與cat /etc/hostname一樣

編輯完後啟動o2cb
# service o2cb load
# service o2cb configure
# service o2cb online

接著建立掛載ocfs2檔案系統
mkfs.ocfs2 /dev/sdb1
mount -t ocfs2 /dev/sdb1 /mnt/test

在每一台initiator都做一樣的動作(mkfs只須做一次)
可以試著在initiatorA建立檔案測試
然後看initiatorB是否立即同步

這方式可以達到同步跟同時寫入
不過缺點是OCFS2不支援overlayfs upper...

參考資料:
http://www.voidcn.com/article/p-wmzavzze-xe.html
https://blog.51cto.com/nosmoking/1873507
http://linux.vbird.org/linux_server/0460iscsi.php#server