prettyprint

2022年8月23日 星期二

FreeBSD 13.1 Bluetooth Serial Port(SPP client) + Expressif ESP32 MCU(SPP Server): Remote Power Switch and Text Message

    本篇文章介紹使用FreeBSD藍芽的Serial Port(SPP)與Expressif ESP32微控制器(MCU)製作藍芽電源遙控開關,並與Android Phone互傳訊息。



    FreeBSD系統、ESP32 MCU與Android phone三個藍芽設備構成bluetooth piconet,ESP32 MCU當成Master, FreeBSD與Android phone當成slave。

有關ESP32 MCU當成SPP server的製作過程請參閱下列文章說明:https://rfwumcu.blogspot.com/2022/04/esp-idf-using-esp-idf-classic-bt-spp.html

本篇文章著重在FreeBSD藍芽Serial Port(SPP Client)設定方法。

  1. 查看FreeBSD上的藍芽設備名稱:

  2. 啟用藍芽ubt0:

  3. 檢查藍芽配對服務(hcsecd)是否啟用:

  4. 配對藍芽:
    此指令會自動更改/etc/bluetooth/hosts與/etc/bluetooth/hcsecd.conf檔案,自動加入設定內容。

  5. 檢查遠端藍芽設備是否開啟SPP服務:

  6. 連線遠端Bluetooth SPP Server:
    rfcomm_sppd開啟的serial port pseudo-terminal 為/dev/pts/2

  7. 由pseudo-Terminal收送訊息:
    送出訊息

    接收訊息


👉成果影片展示:




2022年8月18日 星期四

FreeBSD 13.1 透過手機連線網際網路(FreeBSD 13.1 Internet Access via Cell Phone)

  當處在沒為可上網的區域網路時,可利用手機透過電信網路連線網際網路。 本篇文章實做以FreeBSD 13.1 利用手機的USB網路共用(USB Tethering)、藍芽網路共用(Bluetooth Tethering)、與Wi-Fi熱點(Wi-Fi hot spot) 接取網際網路。



一、USB網路共用(USB Tethering):

  1. 使用Android手機時載入if_urndis:
    # kldload if_urndis

  2. 使用iPhone手機時載入if_ipheth:
    # lkdload if_ipheth

  3. 手機開啟USB網路共用


  4. FreeBSD就會新增一個ue0的網路介面

  5. 利用dhclient取得ip等網路設定
    # dhclient ue0

詳細步驟可參閱底下影片介紹

二、藍芽網路共用(Bluetooth Tethering):

  1. FreeBDS藍芽是架構在netgraph下,以指令dmesg查看是否有支援的驅動程式:
    # dmesg | grep ubt

  2. 啟用藍芽:
    # service bluetooth start ubt0
    若出現錯誤,再啟用一次即可。

  3. 有關Bluetooth device 設定檔存放在
    /etc/defaults/bluetooth.device.conf
    個別的device要覆寫default設定,更改檔案建立在/etc/bluetooth/<device_name>.conf中,例如/etc/bluetooth/ubt0.conf。像是需不需要配對驗證,可不可以被查詢名稱(inquiry, discoverable等)。

  4. 執行hcsecd或在/etc/rc.conf中設置hcsecd_enable="YES",負責藍芽配對,相對設定檔存在/etc/bluetooth/hcsecd.conf。

  5. 以bluetooth-config scan 掃描可連線的藍芽設備,此指令可配對藍芽外並將修改/etc/bluetooth/hosts與/etc/bluetooth/hcsecd.conf檔案。
    /etc/bluetooth/hosts存放bluetooth address與自訂名稱對應。
    /etc/bluetooth/hcsecd.conf存放配對PIN資料。


  6. 查看手機的藍芽是否支援NAP(Network Access Point) Service class:
    指令為sdpcontrol -a device browser or  sdpcontrol -a device search 0x1116
    0x1116為bluetooth NAP service class UUID
    # sdpcontrol -a iPhone search 0x1116

  7. 手機開啟藍芽網路共用:


  8. 使用btpand指令連線藍芽:
    # btpand -d device -a address -s NAP -i tap0

  9. 取得ip等相關網路設定
    dhclient tap0

三、Wi-Fi熱點(Wi-Fi hotspot):

  1. 手機開啟Wi-Fi hotspot,設定ssid, password
  2. FreeBSD 啟用Wi-Fi。
  3. 在/etc/wpa_supplicant.conf設定連線ssid與psk:



詳細設定過程請參閱下列影片連結:




2022年8月15日 星期一

FreeBSD 13.1 & LightDM & Multi Desktop Environment

在FreeBSD上同時安裝多的桌面環境,像MATE、XFCE、KDE5等, 使用LightDM display manager即可輕鬆隨時切換登入任何一個桌面環境。


安裝過程

  1. 系統基本安裝
  2. 安裝pkg
    # pkg update

  3. 安裝xorg
    # pkg install -y xorg

  4. 同時安裝MATE、XFCE、KDE5等桌面環境
    # pkg install -y mate xfce kde5

  5. 安裝lightdm, lightdm-gtk-greeter
    # pkg install lightdm lightdm-gtk-greeter

  6. 啟動設定: /etc/rc.conf
    # sysrc dbus_enable="YES"
    # sysrc lightdm_enable="YES"
安裝完成重新啟動即可選擇登入任一桌面

詳細過程成請參閱下列網址:


2022年8月3日 星期三

FreeBSD 13.1 auto mount: Builtin automount vs. Ports automount vs. Desktop automount

本篇文章探討FreeBSD 3.1 USB device auto mount功能,比較系統內建的automount(/usr/sbin/automount)、Port的automount(/usr/local/sbin/automount) 與各種Desktop環境的auto mount功能。



一、系統內建的automount(/usr/sbin/automount):

設定FreeBSD自動掛載USB Device步驟.

  1. 若須使用NTFS檔案系統,須先安裝fusefs-ntfs package
    # pkg install fusefs-ntfs

  2. 建立/etc/devfs.rules:加入
    [localrules=10]
    add path 'da*' mode 0660 group operator

    說明:設定device的onwer與permission,系統內的使用了ruleset number為1-5,自訂的為5以上,相同的number會覆蓋。

  3. 在/etc/rc.conf加入ruleset:
    devfs_system_ruleset="localrules"

    說明:加入user自訂的ruleset

  4. 在/etc/sysctl.conf 加入
    vfs.usermount=1

    說明:允許non-root user可mount device

  5. 在/etc/auto_master 啟用
    /media      -media       -nosuid

    說明:自動掛載在/media路徑下。

  6. 檢查/etc/devd.conf是否包含下列設定
    notify 100 {
         match "system" "GEOM";
         match "subsystem" "DEV";
         action "/usr/sbin/automount -c";
    };

    說明:內定的上述一段notify為放置在註解內,可複製註解外。

  7. 啟用autofs: 在/etc/rc.conf加入:
    autofs_enable="YES"
    sysrc kld_list+=fusefs

    說明:開機後自動啟用autofs與fusefs
經過上述設定後,只要插入USB device就會偵測到,一般使用不需要mount device即可使用,內定掛載在/media下,透過
$ ls -l /media
即可知道掛載的devices,但是一般使用者沒有權限umount device。詳細過程請觀看下列影片展示:


二、安裝port的automount:

有關的port說明請參閱:https://github.com/vermaden/automount/ 。

  1. 支援:
    NTFS/MSDOS/exFAT/EXT2/EXT3/EXT4/UFS/XFS/HFS/MTP/ISO9660
    自動安裝:
    
    automount: 1.7.8
           e2fsprogs: 1.46.5_1        e2fsprogs-libblkid: 1.46.5        e2fsprogs-libuuid: 1.46.5        fusefs-ext2: 0.0.10_3        fusefs-libs: 2.9.9_2        fusefs-ntfs: 2022.5.17        libublio: 20070103_3
  2. 相關設定檔:
    👉/usr/local/etc/automount.conf: 
    可設定:
    USERUMOUNT='YES'
    MNT_PREFIX='/media'
    group='operator'
    FAT_ENCODING=
    FAT_CODEPAGE=
    ATIME='YES'
    RETRY_COUNT='1'
    NOTIFY='YES'
    REMOVEDIRS=NO
    NICENAMES=YES
    IGNORE_SYS_PARTS=YES


    👉/usr/local/etc/devd/automount_devd.conf
    說明:會自動安裝此檔案,處理devd notify

  3. 當automount設定:USERMOUNT=YES時,會執行"chmod +s /sbin/umount",non-root user也可umount device。
  4. 使用port automount時須將原來的autofs_enable, /etc/auto_master,與在/etc/devd.conf中的notify設定取消。
  5. /etc/devfs.rules設定仍須一需要設定。
詳細步驟與展示請參閱下列影片片段:


三、各種Desktop(MATE, XFCE, KDE)的automount:

上述兩種方式均未安裝任何Desktop環境自動掛載USB Device,下列影片片段展示安裝port auotmount在MATE, Xfce, KDE下,在桌面環境的運作。
另外在KDE桌面環境下對於usb device自動掛載以內附在桌面系統中,無須再安裝automount(Builtin or port),就有完善整合的運作,請參閱下列影片片段展示。



2022年8月2日 星期二

Integrate FreeBSD NIS and NFS servers for Ubuntu Desktop and FreeBSD Desktop Clients(using ZFS)

本文文章記錄使用FreeBSD 13.1 當作NIS(Network Information System) 和使用ZFS檔案系統的NFS(Network File System) Server提供給FreeBSD或其他Non-FreeBSD系統用戶端使用。

目標:

  1. 建立NIS server,提供區網內(FreeBSD or Non-FreeBSD)帳號驗證與hostname對應。
  2. 用戶端home directory放在NFS server上,達到使用者漫遊目的。
  3. ZFS server提供共同儲存空間,透過ACL控制存取權限,達到分類控管。 
一、安裝過程
實驗架構如下圖

🌱FreeBSD NIS Server:
    FreeBSD  的 NIS 是內建的,因此只要設定啟用即可:
  1. /etc/rc.conf:
    nisdomainname="nis-nfs.local"
    nis_server_enable="YES"
    nis_yppasswdd_enable="YES"
    nis_yppasswdd_flags="-i -u -a"


    說明: nisdomainname可任意設定,但為了讓其他Non-FreeBSD Client,可設定為Internet Domain Name。
    啟用rpc.yppasswd讓使用著可以更改password
    nis_yppasswdd_flags額外設定讓ubuntu client可順利執行yppasswd

  2. 建立NIS maps(NIS 資料庫):

    FreeBSD NIS Client查詢NIS map為/var/yp/nis-nfs.local/master.passwd.byname,Ubuntu NIS Clinet 查詢的是/var/yp/nis-nfs.local/passwd.byname,因此
    FreeBSD NIS server for Non-FreeBSD NIS Client:
    👉/var/yp/Makefile: uncomment UNSECURE = "True", and then 
    執行指令,建立NIS maps:
       建立空的/var/yp/mster.passwd:
               touch /var/yp/master.passwd
               chmod 600 /var/yp/master.passwd
        ypinit -m nis-domainname

    password.byname, password.byid 才會提供加密密碼
    (為提供加密的passwd.byname or password.byid)
    使用pw指令建立NIS user maps
    pw useradd <username> -u uid -c "user name" -d /nfshome/<username> -M 700 -y /var/yp/master.passwd -Y -m  -w yes
    同時建立NIS user與nfs user directory

  3. /etc/hosts: 
    192.168.1.71  nfs   nfs.nis-nfs.local
    192.168.1.72  nis   nis.nis-nfs.local

    其他Clinet即可透過maps中的hosts.byname即可使用此設定
  4. /var/yp/securenets加入可存取限制
    #此行一定樣加入
    127.0.0.1    255.255.255.255
    #其他
    192.168.1.0    255.255.255.0   

🌱詳細步驟可參閱文末影片連結:

🌱FreeBSD NIS Client:
  • /etc/rc.conf:
    nisdomainname="nis-nfs.local"
    nis_client_enable="YES"
  • /etc/master.passwd: 在最後加入
    +:::::::::
  • /etc/group: 在最後加入
    +:*::
🌱Ubuntu NIS Client:
  • 安裝NIS套件:
    sudo apt install ypbind-mt nis
  • /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow等檔案 最後加入一行
    +
  • /etc/nsswitch.conf: 更改加入紅色框部分

  • /etc/hosts: 加入nis hostname
    192.168.1.72   nis   nis.nis-nfs.local
    指加上一行即可,其他可由NIS server /etc/hosts(/var/yp/nis-nfs.local/hosts.byname取的定義
  • /etc/yp.conf加入
    domain nis-nfs.local  server nis.nis-nfs.local
  • 執行ypdomainname設定domainname:
    ypdomainname nis-nfs.local
  • /etc/defaultdomain:
  • nis-nfs.local
  • 執行
    sudo systemctl enable ypbind
    在系統啟用時即啟用NIS client ypbind

🌱FreeBSD NFS Server設定:
✅啟用FreeBSD NFS Server功能:
  1. /etc/rc.conf:
    rpcbind_enable="YES"
    nfs_server_enable="YES"
    mountd_enable="YES"

    rpc_lockd_enable="YES"  # 有些應用程式需要lock
    rpc_statd_enable="YES"

  2. /etc/exports:
    設定分享的目錄,例如: "/usr/src -ro -network 192.168.1.0/24"
    但是以ZFS dataset為NFS share directory時改用設定 zfs set sharenfs property,不用再/etc/exports設定,會自動在/etc/zfs/exports中加入設定。例如,分享兩個dataset,一個做為users的home directory,讓user可在不同機器間漫遊。另外一個dataset作為共用資料夾,並透過ACL設定存取權限。

    zfs set sharenfs="-alldirs -maproot=root -network 192.168.1.0/24" datastor/nfshome

    zfs set sharenfs="alldirs -network 192.168.1.0/24" datastor/sharedir
✅啟用FreeBSD NFS client功能:
  1. /etc/rc.conf:
    nfs_client_enable="YES"

  2. /etc/fstab: 
    192.168.1.71:/datastor/nfshome   /nsfhome   nfs  rw  0  0


    讓系統啟用及mount nfs home directory

✅啟用Ubuntu NFS client功能:
  1. 安裝套件:
    sudo apt install zfs-common

  2. /etc/fstab:
    192.168.1.71:/datastor/nfshome   /nsfhome   nfs  rw  0  0
🏀安裝過程與實際測試展示請觀看下列影片: