2021年7月11日 星期日

CentOS7 (x86) 安裝 Anaconda3 (Individual Edition)


 一、安裝檔下載

在 Anaconda 的官方主網頁:

https://www.anaconda.com/products/individual

網頁的右下角,可以找到 Linux 的安裝檔,目前 (2021/07/11) 的版本是:

          64-Bit (x86) Installer (544 MB) 

          複製下網址,用 wget 下載

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

二、驗證檔案

如果擔心下載到的檔案有問題,可以依照 官方安裝教學,使用 sha256sum 檢查

https://docs.anaconda.com/anaconda/install/linux/

假定下載下來的檔名為 Anaconda3-2021.05-Linux-x86_64.sh,可用命令

sha256sum Anaconda3-2021.05-Linux-x86_64.sh

從 安裝教學 中 Verify data integrity with SHA-256 找尋對應的檔名的 sha256sum 值,做個驗證。

三、 安裝給多人共用

此處共用的想法是,用root安裝給大家用。安裝在 /opt/anaconda3 目錄下。

為何要安裝於 /opt 下,可以參考網頁下方網頁的說明:

https://www.itread01.com/content/1546669202.html

安裝的命令:

bash Anaconda3-2021.05-Linux-x86_64.sh

過程中選擇目錄,請輸入 /opt/anaconda3

接著會遇到詢問是否要在 ./bashrc 中加入 conda init,如此登入後就會預設進入 base環境

Do you wish the installer to initialize Anaconda3

by running conda init? [yes|no]

若不想影響原來的使用習慣,建議選擇 no。之後若要進入base環境,可以用:

source /opt/anaconda3/bin/activate

 


2020年3月18日 星期三

CentOS6.3 安裝 Python3.7.7 (快速註記)

本來測試安裝 Python3.8.2,但很3.8.2無法安裝 Pandas,因此退而求其次選擇 3.7.7 

由於未安裝compile工具,從此開始安裝

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

*** 接著一定要記著先裝好 openssl ,否則 pip 不能用,又要重新 build

wget https://www.openssl.org/source/openssl-1.1.1e.tar.gz
tar -xzf openssl-1.1.1e.tar.gz
cd openssl-1.1.1e
./config --prefix=/usr/local/openssl no-zlib
make
make install

放置openssl  lib

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl/ /usr/include/openssl.bak

ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

echo /usr/local/lib >> /etc/ld.so.conf.d/openssl.conf


下載Python 及解壓縮

wget --no-check-certificate https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz
tar -xzvf Python-3.7.7.tgz
cd Python-3.7.7

安裝。

./configure --with-openssl=/usr/local/openssl/
make
make install

安裝完畢,執行檔位於 /usr/local/bin 下面, python3 & pip3


2020年3月5日 星期四

使用 letsencrypt 與 Certbot 申請網頁 ssl 憑證

近日透過 nctu.me 免費申請了一個 domain name,想讓家裡的桌機網頁可以透過 https 連線。
於是選擇了 https://letsencrypt.org/zh-tw/ 免費的 ssl 的申請機制。

依照 letsencrypt 官網推薦的方式,使用Certbot 來自動建立憑證。但很不幸的 Certbot 並不支援windows 環境,因此耍了點小手段,先在桌機run了 VM,執行了 CentOS7,然後調整寬頻分享器,先把 CentOS7 的 web server 對應到對外的 web server,如此可以讓 CentOS7 自動建立憑證。完成之後,再把憑證 copy 到桌機的 apache server 來用。

PS : 但原本的自動更新憑證機制,則無法在本機執行,所以憑證僅有3個月效期,之後還是得再透過 VM 來更新。

CentOS 獲得的憑證,權限如下:

drwxr-xr-x /etc/pki/site/certs/
-rw-r--r--. 1 root root 1911 2020-03-04 22:19 cert.pem
-rw-r--r--. 1 root root 1647 2020-03-04 22:19 chain.pem
-rw-r--r--. 1 root root 3558 2020-03-04 22:19 fullchain.pem
-rw-------. 1 root root 1708 2020-03-04 22:19 privkey.pem

若要直接搬移到其他 CentOS機器,請注意 SELinux 的安全性,可能讓 apache server 找不到憑證。若有發生設定正確,卻始終找不到憑證的情況,可以試著設定整個目錄的權限:

restorecon -Rv /etc/pki/site/certs/

接著複製到windows上,將apache server 的設定指向這些憑證,也就成功了。

補充:
要開啟 apache server 的  https service,設定動作如下:

conf/httpd.conf
  打開 mod_ssl.so 與 socache_shmcb_module (與ssl cache有關) 模組
  LoadModule ssl_module modules/mod_ssl.so
  LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

  引入 httpd-ssl.conf,打開下面設定。
  Include conf/extra/httpd-ssl.conf

conf/extra/httpd-ssl.conf
  設定憑證檔還有 Key 的位置
  SSLCertificateFile "D:/Program/Apache24/conf/site/certs/cert.pem"
  SSLCertificateKeyFile "D:/Program/Apache24/conf/site/certs/privkey.pem"

執行 bin/ApacheMonitor.exe
  用監控程式,重新啟動 apache

2019年12月4日 星期三

使用python透過firebase發送ios推播

為了簡化推播的困難度,通常會透過firebase等平台進行推播,以下為一段透過firebase後台送出推播到ios機器的sample:

from urllib import request
import json

to = <fmc token>
url = 'https://fcm.googleapis.com/fcm/send'
key = <firebase key>

headers = {
'Content-Type' : 'application/json',
'Authorization' : 'key=' + key,
}

data = {
  "to": to,
  "content_available" : True,
  "data": {
      'info' : 'data to background mode',
    },
  'notification' : {
    'title' : 'this is title',
    'body' : 'this is body',
  },
}

dataJson = json.dumps(data).encode('utf-8')

r = request.Request(url, dataJson, headers = headers)
result = request.urlopen(r)
result.getcode()

詳細的payload內容可以參考firebase的說明網頁:

Firebase Cloud Messaging HTTP protocol
https://firebase.google.com/docs/cloud-messaging/http-server-ref




2019年10月25日 星期五

centos 下 conda 使用簡易提示

conda env list => 列出已經有的環境
conda create --name <env> => 建立某個環境
conda create --name <env> python=3.7 => 指定python版本
conda env create --name <env> -f <yml file> => 依照指定環境建立
conda env remove --name <env> => 移除某個環境

source activate <env> => 切換到某個env
source deactivate => 離開env

切換到環境下,可以做下面的動作:
conda list => 列出安裝的package
conda env export --file <yml file> => 將環境設定輸出到 yml檔

2019年6月15日 星期六

centos7 架設 vsftpd (virtual user 使用 mysql 與 local account 並存)

先前使用過 mysql 當作帳號驗證,若想要混合 linux local account 及 mysql 中的帳號,需要考慮兩個部分。1. 登入認證。 2. 目錄及權限。

登入認證:
  考慮使用者先使用 mysql 驗證,若無法通過則使用原來的 linux 帳號認證,因此 pam 檔使用原先兩個 pam 混合。需要注意式 mysql 的部分,required 要更換成 sufficient,也就是 mysql 的認證通過後,就不再檢查後續的認證。

  編輯 pam 檔 /etc/pam.d/vsftpd_mix

#%PAM-1.0
auth       sufficient pam_mysql.so db=vsftpd user=vsftpd
  passwd=42fdsFDE3$ host=localhost table=accounts
  usercolumn=username passwdcolumn=password crypt=3
account    sufficient pam_mysql.so db=vsftpd user=vsftpd
  passwd=42fdsFDE3$ host=localhost table=accounts
  usercolumn=username passwdcolumn=password crypt=3
session    optional     pam_keyinit.so    force revoke
auth       required pam_listfile.so item=user sense=deny
  file=/etc/vsftpd/ftpusers onerr=succeed
auth       required pam_shells.so
auth       include password-auth
account    include password-auth
session    required     pam_loginuid.so
session    include password-auth

並在 vsftpd.conf 中,調整設定:

pam_service_name=vsftpd_mix

目錄及權限:
  原先使用 mysql 中 user時,vsftpd.conf 增加了以下設定:

virtual_use_local_privs=YES
guest_enable=YES
guest_username=vuser
user_sub_token=$USER
local_root=/home/vuser/$USER

這些項目僅能針對 virtual user,因此利用 user_config_dir的設定,依照登入帳號,如果是 local account,就反向取消這些設定。

vsftpd.conf 增加設定

user_config_dir = /etc/vsftpd/user_conf

在 /etc/vsftpd/user_conf 下面,針對每個 local account 增加設定檔,例如 local account : xyz
增加 /etc/vsftpd/user_conf/xyz,內容為

virtual_use_local_privs=NO
guest_enable=NO
user_sub_token=$USER
local_root=/home/$USER

PS:亦可反向思考,local account的設定寫在 vsftpd.conf中,每個 virtual user 建立一個檔案在 /user_conf 之下。可考慮哪種方式比較容易處理。

2019年5月15日 星期三

firewall-cmd 參數速記

*. zone name limited 17 chars
*. firealld-cmd 的參數:

共用參數
  --permanent 查詢、設定 硬碟中儲存的設定

zone查詢、設定相關
  --get-default-zone  查詢預設的zone
  --set-default-zone=... 指定預設的zone
  --get-zones 列出所有的zones
  --list-all-zones 列出所有zones的詳細設定
  --zone=... --list-all 指定對某個zone列出詳細設定

active zone相關
  --get-active-zones 查詢各網路介面運作中的zone
  --zone=... --change-interface=... 設定網路介面運作中的zone

service相關
  --get-services 列出已經定義的服務名稱
  --reload  重新讀入服務名稱。
    (user 可以在 /etc/firewalld/services下增加自己的service設定,
    可參考/usr/lib/firewalld/services下,原有的各種service寫法)
  --zone=... --list-services 列出zone目前打開firewall的服務
  --zone=... --add-service=... 增加打開firewall的服務
  --zone=... --remove-service=... 關閉firewall的服務
  --zone=... --add-port=[port,port-port]/['tcp','udp']  ...增加打開某個指定的port
  --zone=... --remove-port=[port,port-port]/['tcp','udp']  ...增加打開某個指定的port

連線過濾相關
  --zone=... --list-rich-rules 列出連線過濾設定
  --zone=... --add-rich-rule=... 增加連線過濾設定
  --zone=... --remove-rich-rule=... 刪除連線過濾設定
  sample:
    'rule family="ipv4" source address="192.168.111.0/24" port port="22" protocol="tcp" reject'
    'rule family="ipv4" source address="192.168.111.0/24" service name="http" accept'