OpenSIPS 建置筆記

使用 opensips 建立一個 sip server 給內部使用

本文以 debian 9.5 為例 ( opensips v2.2)

安裝 mariadb 當資料庫

apt-get install mariadb-server
mysql_secure_installation

Enter current password for root (enter for none):
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y

安裝 opensips

apt-get install opensips opensips-mysql-module

設定

設定監聽 IP

vi /etc/opensips/opensips.cfg

修改監聽 ip 這邊不可以用 127.0.0.1 一定要用你的 ip
然後 alias 設定為 hostname

listen=udp:192.168.1.88:5060
alias=udp:sip.hsps.tp.edu.tw:5060

設定 domain 與資料庫

vi /etc/opensips/opensipsctlrc

SIP_DOMAIN=your.domain.name #設定你的domain
DBENGINE=MYSQL #使用 mysql/mariadb
DBHOST=localhost #資料庫主機
DBNAME=opensips  #資料庫名稱
DBRWUSER=opensips  #SQL帳號
DBRWPW="opensipsrw" #更改為你想設定的密碼

依照上面設定建立 sql 帳號與資料庫

opensipsdbctl create

MySQL password for root: 輸入 mysql root 密碼
Enter character set name: latin1
Install presence related tables? (y/n): y
fraud_detection emergency? (y/n): y

新增 SIP 帳密 (for client)

opensipsctl add 101 101
opensipsctl add 102 102

帳號資料會建立在 table opensips.subscriber

然後就可以通了

設定系統服務

設定開機自動啟動

 systemctl enable opensips

平常操作就

啟動 systemctl start opensips

重啟 systemctl restart opensips

查看狀態 systemctl status opensips

HP Win10 更新後出現 WDF VIOLATION 無法開機

WDF_VIOLATION
今天公司的 HP 桌機 Windows 10 更新重開之後就出現 WDF VIOLATION 錯誤

auto repair gg
然後重開自動進修復又失敗

這是因為更新與 HP 的鍵盤快速鍵驅動衝突
解決方法請在這個畫面按下面 “進階選項” 然後選 “疑難排解” / “進階選項” / “命令提示字元”

切換到你安裝 windows 的磁碟 以下以 C: 磁碟為例
依序打下列指令 把原本的驅動更改名稱使其不啟動

c:
cd windows\system32\drivers\
ren HpqKbFiltr.sys HpqKbFiltr.sys.old

重開機之後就 ok 了

XenServer 轉移至 Proxmox (PVE)

XenServer 轉移至 Proxmox (PVE)
本文亦可適用於 xcp-ng

準備工作

XenServer 匯出 xva

用 ssh 登入 xenserver

使用以下指令匯出 xva

xe vm-export vm={你的虛擬機器名稱} filename={匯出的檔名.xva}

( 可以用 xe vm-list 列出所有的 vm 名稱)

轉換映像檔

這個部份我是在 pve 上面做,所以先把 xva 檔丟過來或是用 nfs 之類的其他方式掛載

解壓縮 xva 檔

tar xf xen_vm.xva

解開會得到

  • 檔案 ova.xml
  • 資料夾 Ref:990 (數字不盡相同)

再用 xenmigrate.py 將資料夾 Ref:990 轉換為 raw image (以下以 vm_raw.img 為例)

注意 轉換成 raw 的時候會佔滿原本該虛擬硬碟原本分配的硬碟大小, 而非 thin 大小

python xenmigrate.py -c Ref:990 vm_raw.img

產生出的 vm_raw.img 即為 raw image

如果需 qcow2 檔案則可以用 qemu-img 轉換 (以下以輸出 vm.qcow2 為例)

 qemu-img convert -f raw -O qcow2 vm_raw.img vm.qcow2

建立虛擬機器

登入 pve web ui 建立一個虛擬機器

ex: id=101 disk=qcow2(32G)

虛擬機器不要開

ssh 進去 找到虛擬硬碟實際位置 (ex: /mnt/pve/NAS/images/101/vm-101-disk-1.qcow2)

本機儲存請找 /var/lib/vz/images/{vm-id}

把轉出來的 qcow2 覆蓋掉剛建立的 vm-101-disk-1.qcow2

mv -f vm.qcow2 /mnt/pve/NAS/images/101/vm-101-disk-1.qcow2

修改設定檔磁碟容量 /etc/pve/qemu-server/101.conf

#virtio0: RS_PVE_NFS:101/vm-101-disk-1.qcow2,size=32G
virtio0: RS_PVE_NFS:101/vm-101-disk-1.qcow2,size=250G

開機測試沒問題後,就可以把先前產生的 xva / img / ova / Ref 檔案砍一砍了

Ref:

  • https://pve.proxmox.com/wiki/Xenmigrate
  • https://github.com/derekjhyang/xenserver_to_xen

gitea 安裝筆記

gitea

安裝 mariadb

sudo apt-get install mariadb-server
sudo systemctl start mysqld
sudo mysql_secure_installation

如果已設密碼,但用無法登入 (MySQL Workbench / Sequel Pro)

mysql -u root -p
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

建立 gitea 資料庫

mysql -u root -p
CREATE DATABASE gitea` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

建立使用者 gitea 並賦予 gitea 資料庫權限

mysql -u root -p
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';

安裝 gitea

使用一般 user 登入

mkdir gitea
cd gitea
wget -O gitea https://dl.gitea.io/gitea/1.3.2/gitea-1.3.2-linux-amd64
chmod +x gitea
./gitea web

測試 http://{your_ip}:3000

第一個註冊使用者為最高權限

安裝 nginx

sudo apt-get install nginx

在 /etc/nginx/sites-available 建立一個網站設定檔 gitea.conf

vi gitea.conf

server {
        listen 80;
        listen [::]:80;
        server_name your.host.name;

        root /var/www/html;
        index index.html;
        location / {
                proxy_pass http://127.0.0.1:3000;
        }

連結到啟動區 並移除預設網站 重新啟動 nginx

cd /etc/nginx/site-enable
sudo ln -s ../sites-available/gitea.conf gitea.conf
sudo rm default
sudo systemctl restart nginx

設置 https

安裝 certbot 並執行 certbot

sudo apt-get install python-certbot-nginx
sudo certbot --authenticator webroot --installer nginx

gitea 關閉註冊

cd gitea/custom/conf/
vi app.ini

DISABLE_REGISTRATION  = true

改為服務啟動

/etc/system/gitea.service

[Unit]
Description=Gitea
After=syslog.target
After=network.target

[Service]
Type=simple
User=alexw
WorkingDirectory=/home/your_id/gitea/
ExecStart=/home/your_id/gitea/gitea web
Restart=always
RestartSec=2s

[Install]
WantedBy=multi-user.target

啟動服務

sudo systemctl start gitea.service

設定開機自動啟動服務

sudo systemctl enable gitea.service

自建 microbit 網頁編輯器

微軟 makecode 的 micro:bit 網頁編輯器 是 opensource 的,我們可以從 github/Microsoft/pxt-microbit 這裡找到,
上面的安裝說明很清楚照著做應該都不會出什麼問題,不過人就是懶懶,
所以我們把流程都寫在這個 shell script 執行就裝好了

首先準備一台 debian
安裝好 sudo
# apt-get install -y sudo

並且設定 sudo 不問密碼
# visudo
%sudo ALL=(ALL:ALL) NOPASSWD:ALL

接著用一般 user 登入(以下以alexw為例)
新增一個檔案
vi install_microbit.sh

sudo apt-get install -y curl build-essential git
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get update
sudo apt-get install -y nodejs
sudo npm install -g jake
sudo npm install -g typings
mkdir makecode
cd makecode
git clone https://github.com/microsoft/pxt
cd pxt
git checkout v0
npm install
typings install
jake
cd ../
git clone https://github.com/microsoft/pxt-microbit
cd pxt-microbit
sudo npm install -g pxt
npm install
sudo npm link ../pxt

賦予執行權限
chmod u+x install_microbit.sh

執行這個 script
./install_microbit.sh

跑一陣子後應該就裝好了
然後我們需要他開機自動執行,所以得放一個 service 在 systemd 那邊
注意 這邊有路徑 請依照你自己的帳號編輯路徑(有兩行喔)

編輯服務檔
sudo vi /etc/systemd/system/microbit.service

[Unit]
Description=microbit

[Service]
Environment=HOME=/home/alexw
Type=simple
WorkingDirectory=/home/alexw/makecode/pxt-microbit
ExecStart=/usr/bin/pxt serve --cloud --hostname 0.0.0.0 --port 80

[Install]
WantedBy=multi-user.target

然後我們就可以用 systemctl 去控制

先測試一下啟動服務
sudo systemctl start microbit.service
第一次會跑個一兩分鐘左右
可以用 sudo systemctl status microbit.service 看一下有沒有錯誤

沒問題就設定開機自動啟動
sudo systemctl enable microbit.service

搞定收工

Win10 內建的還原功能 Unified Write Filter (UWF)

原來 Win10 企業版與教育版有內建還原功能 Unified Write Filter (UWF)
能做到跟重開機就瞬間還原 公用空間或是電腦教室 就不用再買還原軟體或是裝還原卡了

首先必須要開啟這個功能
用指令的話是 DISM /Online /enable-Feature /FeatureName:client-UnifiedWriteFilter

用控制台則是

控制台 / 應用程式與功能 / 程式設定 / 開啟或關閉 windows 功能
懶懶的話就 win+R / OptionalFeatures.exe

打開 裝置鎖定 勾選 整合寫入篩選器

重開機生效

剩下設定就都是靠 uwfmgr.exe 指令了
先打開管理者權限的 cmd (開始 cmd / alt-shift-enter)

uwfmgr overlay Set-Type DISK 改用硬碟當作暫存區(預設是 RAM )
uwfmgr overlay set-size 10240 設定暫存大小為 10240 MB (10G)
uwfmgr overlay set-warningthreshold 10000 設定警告閾值為 1000M
uwfmgr overlay set-criticalthreshold 10240 設定嚴重閾值為 10240M
uwfmgr volume protect c:  設定保護磁碟為 C
uwfmgr servicing Update-Windows  設定可以接受 windows 更新

設定好之後 啟用保護

uwfmgr filter enable

重開機後就是保護狀態了
如果需要安裝程式或變動要先解除保護 然後重開機後就會是一般模式

uwfmgr filter disable

如果需要讓 windows 防毒更新可以正常更新 必須做排除部分檔案與機碼
可參考這篇文章做以下設置

uwfmgr file add-exclusion C:\Program Files\Windows Defender
uwfmgr file add-exclusion C:\ProgramData\Microsoft\Windows Defender
uwfmgr file add-exclusion C:\Windows\WindowsUpdate.log
uwfmgr file add-exclusion C:\Windows\Temp\MpCmdRun.log
uwfmgr registry add-exclusion HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender

我自己是沒有啟用啦 反正都會還原 就不需要防毒了(但是有 usb 交互感染風險)

其他就參考官方這兩篇
Unified Write Filter (UWF)
uwfmgr.exe

解決 LibreNMS Missing dependencies!

Error: Missing dependencies! Run the following command to fix:

./scripts/composer_wrapper.php install --no-dev

奇怪 今天一開 librenms 炸了這個訊息
解決方法是 安裝一下 php-mbstring

sudo apt-get install php7.0-mbstring

然後又爆寫入權限….

Error: bootstrap/cache, storage, storage/framework/sessions, storage/framework/views, storage/framework/cache, logs not writable! Run these commands as root on your LibreNMS server to fix:

chown -R librenms:librenms /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/storage/framework/sessions /opt/librenms/storage/framework/views /opt/librenms/storage/framework/cache /opt/librenms/logs

setfacl -R -m g::rwx /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/storage/framework/sessions /opt/librenms/storage/framework/views /opt/librenms/storage/framework/cache /opt/librenms/logs

setfacl -d -m g::rwx /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/storage/framework/sessions /opt/librenms/storage/framework/views /opt/librenms/storage/framework/cache /opt/librenms/logs

If using SELinux you may also need:

解決方法

debian 用 apt install acl 就可以照說明執行 setfacl 了

以上正解
以下土炮

chown -R librenms:librenms /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/storage/framework/sessions /opt/librenms/storage/framework/views /opt/librenms/storage/framework/cache /opt/librenms/logs
chmod -R 777 /opt/librenms/bootstrap/cache /opt/librenms/storage /opt/librenms/storage/framework/sessions /opt/librenms/storage/framework/views /opt/librenms/storage/framework/cache /opt/librenms/logs