發表文章

目前顯示的是 1月, 2022的文章

開機時確保 docker 網路建立 docker 網路不要冠上 service 的名稱

需求:  ubuntu 18 之後預設已經沒有 /etc/rc.local 這個檔案,所以,要自已加1個,然後就能做開機之後要做的事  docker 的網路已經事先建(create)好了,如果直接在 docker-compose.yml 的設定檔裏面直接引用的話,不但會和建好的網路相衝,必須移掉相衝的網路重新啟用容器,而啟用設定檔內的網路時, service 的名稱就會冠在 network NAME 前面,不是很直覺  如果 docker 網路沒有建好,想要開機時確保 網路建立 起來 工作環境:   ubuntu server 18 lts     docker     /etc/rc.local 動手: /etc/rc.local 這個檔預設是沒有的,開起來就行,記得加上執行的權限,等一下重開機才會執行 printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local   vim /etc/rc.local 在 exit 0 之前加上你要做的事,確保建立 docker 網路 docker network create your.network.name --driver=bridge --subnet=192.168.0.0/24 || true   編輯容器的設定檔 /somewhere/docker-compose.yml services :   app :     image : someone/app:latest     restart : always     volumes :       - /path/you/want:/data     ports :       - "1.2.3.4:1:1"       - "2:2/udp"     networks : # 把既有的網路指定給 service ...

用 docker 架名稱伺服器並且用 docker-compose 檔來啟用

 之前說了怎麼 用 docker 把名稱伺服器架起來 ,這次要用 docker-compose 來啟用這個伺服器。醬子,之後不管到哪裏要架,拿著這個檔案就行。沒想到從命令列到寫設定檔也是要折騰一下地~  工作環境:     Ubuntu Server 18 LTS         docker-compose         bind9 通常是存成 docker-compose.yml 這樣子直接在同一個資料夾下指令 docker-compose up 就行 version: '3' services:   bind:     image: sameersbn/bind:latest     # 重開機之後會自已啟動     restart: always     dns: 127.0.0.1     networks:       br.rickyworks.tk:         # 別用 192.168.0.1 以免相衝         # 不能只用 ip         ipv4_address: 192.168.0.2         #environment:         #ROOT_PASSWORD: ${ROOT_PASSWORD}         #ROOT_PASSWORD="ROOT_PASSWORD"   #用 env 檔就不用直接把密碼寫在這個設定檔裏     env_file:       - ./.env     ports:       - 10000:1000...

只不過是想用 docker 架個 dns 也要這麼虐嗎

 想著要把伺服器搬到 docker 上去架設,比起那個 apt install PACKAGEsssss 折騰了許多,先拿個 bind DNS server 來試一下,不試不知道,一試不得了,果真折騰!  工作環境:     Ubuntu Server 18 LTS         docker             bind9         docker-compose(另文好了)  一開始先把伺服器清乾淨,然後把 docker 裝起來,把防火牆上的小洞挖好,然後開始動手。  先把 docker 自已的網路設一下, docker network create br.name.u.like --driver=bridge --subnet=192.168.0.0/24  抓一下 docker 的 bind DNS server docker pull sameersbn/bind:latest  啟動 bind DNS server docker run -d --name=bind \   --ip=192.168.0.9 \   --network=br.name.u.like \   --publish=53:53/udp --publish=10000:10000/tcp \   --volume=/home/someone/.bind/primary:/data \   --env= 'ROOT_PASSWORD=WhateverPasswordUWant' \   sameersbn/bind:latest    醬子就行了,然後連到電腦的 ip:10000 把用剛才上面設的 root 密碼 WhateverPasswordUWant 進去 Webmin 設定你要的 DNS 。   =======================...

docker 初探

 做為容器管理,docker, k8s ....很多工具,已經不是新聞,把伺服器搬進容器已經無法再拖…  工作環境:     Ubuntu 18 LTS         docker  裝好了 docker 就來裝個 name server 吧, docker pull ******** 結果:permission denied *********   太急了,忘了用 sudo 或是把 user 加到 docker 群了  sudo docker pull ***********  或是   sudo usermod -aG docker USERNAME 收工!

一些常用的 vba

 如題,稍做整理   Sub resetSheetFormat () ' 重置/清除表單的「設定格式化條件」     Cells.FormatConditions.Delete End Sub Sub resetFilter () ' 重置/清除表單的篩選條件,以顯示所有的資料 ' 篩選功能還開著     ActiveSheet.ShowAllData End Sub Sub saveFile () ' 使用日期命名檔案 ' 另存新檔為 xlsx (沒有巨集的檔案)     ' 今天的日期     today = Format ( Now , "YYYYMMDD" )     ThisWorkbook.Sheets.Copy     ' 關閉詢問視窗     Application . DisplayAlerts = False     ActiveWorkbook.SaveAs Filename := "d:\somewhere\" & today & ".xlsx" , FileFormat := 51     ActiveWorkbook.Close End Sub Sub autoFitAll ()     ' 調整所有欄位 ' 自動符合內容寬度、高度     Cells. Select     Cells.EntireColumn.AutoFit     Cells.EntireRow.AutoFit End Sub Sub trunFilterOnActive () ' 確認是否有開篩選,沒開的話才打開   If Not ActiveSheet.AutoFilterMode Then     ActiveSheet. Range ( "3:3" ).AutoFilter   End If End Sub Sub turnFilterOffActive () ' 如果有開篩選的話就把它關掉 ...

在電腦上操作手機 手機鏡像

 手機用起來很方便,但是工作的時侯可能大多數的操作都在桌上電腦上,如果能在電腦上操作手機,看起來更方便,以往有個 A 牌手機曾經出過應用程式能連自家的手機,但是手機幾經更新後,那連線程式就不能用了,市面上還有很多其他的手機,既然都是 Android 平台,是不是有個程式可以一次滿足這樣的需求。  工作環境:     Windows 10         scrcpy     S牌手機 A20  主要是你得先下載 scrcpy 這個應用程式,然後解壓縮  再到手機裏把開發人員模式打開  然後用 usb 連線到你的手機再用 scrcpy 把你的手機畫面帶到電腦上來  如果你想要用無線網路連線,那得再另外設定一下 怎麼開啟開發人員模式?  設定 > 關於手機 > 軟體資訊 > 點「版本號碼」直到「開發者模式已經啟用 」> 返回設定首頁 > 開發人員選項 > USB 偵錯(啟用) > 如果你想用無線網路連到手機還要開 無線偵錯(啟用)  用 USB 線連到你剛才設好的手機上,到你解壓縮 scrcpy 的程式目錄下,輸入 scrcpy 就可以在電腦上連接到你的手機操作。  如果要用無線網路連到手機的話,先把你的電腦連到和手機同一個網路,並且保持 USB 線連接著你的手機,然後打開命令提示字元,依次輸入以下指令:     adb kill-server     adb usb     adb tcpip 5555 (發現預設跑在 5537 還是 5037 port)     adb connect 192.168.9.1:5555 (這裏的 ip 要換成你的手機上的實際 ip)     adb devices (要出現兩個連線裝置一個有手機的名字,另一個有手機的ip) 如果你順利完成以上的步驟,拔掉 usb 線,再次到你下載 scrcpy 程式目錄下輸入  ...

Excel 的資料貼到 gmail 的結果不太一樣 在 edge 會貼上圖檔寄出

 如果你把 Excel 做好的表格用 email 寄出,使用不同的瀏覽器,貼上的表格,得到的結果不太一樣。 工作環境:     Windows 10 Pro     Gmail 網頁     Edge 瀏覽器     Chrome 瀏覽器     Firefox 瀏覽器 如果你想把表格用圖的方式寄出,請用 Edge  如果你想把表格用 HTML 方式寄出(可以編輯文字),請用 Chrome 或是 Firefox 收工!

確認檔案是否被更動 md5 check sum

 對檔案做運算後的結果可以得到一個亂數值或者稱雜湊值,只要檔案內容更動過這個值就會變動,用這個特性來確保檔案的正確,如果檔案很大就會算很久,有時就被略過了,呵。  工作環境:     Windows         CertUtil     Linux         md5sum Linux 上操作感覺比較直覺: # 對一個檔案做運算 md5sum data1.txt # 對多個檔案做運算 md5sum data1.txt data2.php data3.py # 對多個檔案做運算,將運算結果存到指定的檔案中 md5sum data1.txt data2.php data3.py > sumV.txt # 確認檔案的運算結果 md5sum -c sumV.txt  Windows 上要用 CertUtil # 可能只能針對一個檔案做運算 certutil -hashfile c: \U sers \r icky \D ownloads \W inSCP-5.19.5-Setup.exe md5 運算這個亂數值的函式常用的方式除了 md5 還有其他像是 sha-1 sha256 原理是一樣的,照例略過。   收工!

clamav 一直出現 condition failed

 錯誤訊息:  Condition: start condition failed at Mon 2022-01-10 00:27:08 CST; 8s ago            └─ ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc} was not met 工作環境:     Ubuntu Server 18 TLS     clamav-daemon   你需要這個 https://database.clamav.net/main.cvd 先下載回來,放到 /var/lib/clamav 裏面,然後再重新 service clamav-daemon restart 再次 service clamav-daemon status 時就可以了。 如果設定怪怪的可以  dpkg-reconfigure clamav-daemon ,然後 sudo vim /etc/clamav/clamd.conf 確認裏面 LocalSocket /var/run/clamav/clamd.ctl 有打開,  如果沒有 /var/run/clamav/clamd.ctl 這個檔案也記得 sudo touch /var/run/clamav/clamd.ctl 和 sudo chown clamav:clamav /var/run/clamav/clamd.ctl  收工!

ispconfig 3 裝完後無法登入

 ispconfig 可以管理常用的網路服務像是網站、域名、ftp、ssh、…等常用服務,並且安裝常用的應用程式來增加安全性,這次裝完之後,居然進不去… 工作環境:     Ubuntu Server 18 LTS     ispconfig 3 問題出在預設管理者 admin 的密碼是有問題的,要手動更新,從 https://yoursite.com:8080/phpmyadmin 用你安裝時設定的 MySQL 管理者密碼進入,找到 dbispconfig > sys_user > admin > 編輯 > passwort > 函數:md5() > 你的新密碼  重新回到 https://yoursite.com:8080 用新的密碼進去就行 收工!

Ubuntu 設定時區

 Ubuntu 系統預設的時區是 UTC 和台灣的時區相差 8 小時,通常是程式跑出來之後才會發覺,當然可以透過程式中的內建函式來設定,這次在作業系統裏設定。參照 這裏 作業環境:     Ubuntu Server 18 LTS      先確認時間的訊息: $ timedatectl                         Local time: Sat 2022-01-08 14:34:52 UTC                   Universal time: Sat 2022-01-08 14:34:52 UTC                         RTC time: Sat 2022-01-08 14:34:52                        Time zone: Etc/UTC (UTC, +0000)        System clock synchronized: yes systemd-timesyncd.service active: yes                  RTC in local TZ: no 看一下設定檔內容 $ ls -l /etc/localtime lrwxrwxrwx 1 root root 27 Jan   8 14 : 18 /etc/localtime -> /usr/share/zoneinf/Etc/UTC $ cat /etc/timezone Etc/UTC 看看時區變數的選項有哪些? ...

Selenium 把瀏覽器帶到前景聚焦

 Selenium 基本上是做不到把瀏覽器帶到前景的,通常是要透過 pyWin32 之類的工具來操作,而透過 pyWin32 又要先找到當前在使用的瀏覽器是哪一個(坑),苦手,只能另闢蹊逕來填這個坑。 工作環境:     Windwos 會開很多視窗,疊來疊去,也會開很多網頁     python3         Selenium         pyautogui   driver . maximize_window () pyautogui .moveTo( 500 , 20 ) pyautogui .click() driver . set_window_size ( 960 , 1080 )  結果是讓 Selenium 用全螢幕把整個視窗佔住,這時侯趕快在瀏覽器上點一下,如果有需要再把瀏覽器調成合適的大小,這樣子就可以順利把想要的網頁帶到前景來處理後續的工作。   收工!   ===================== 坑 ======================= pyWin32 找到 firefox、focus,後來不知怎地,抓到的不是工作中的 firefox  固定作業用的網站在瀏覽器中的位置(頁籤),不然作業會變得複雜

selenium 網頁存檔

 selenium 常作為一個除錯工具,可以模擬瀏覽器,瀏覽網頁,儲存網頁內容是非常常見的操作,筆記一下。 工作環境:     windows 10     python 3          selenium          codecs   from selenium import webdriver import codecs import os def savePageSource ( fName ):     #用寫入模式開啟檔案並且指定檔案編碼     f = codecs . open ( fName , "w+" , "utf−8" )     #取得網頁內容     html = driver . page_source     #把網頁內容寫入檔案     f . write ( html ) f . close ()   pageSource = "https://somewhere.com" #設定 chromedriver.exe 所在的路徑,或是和這個 python 放在一起,就可以不用加 executable_path 的參數 driver = webdriver . Chrome ( executable_path = "C: \\ chromedriver.exe" ) driver . implicitly_wait ( 0.5 ) #把瀏覽器放到最大 driver . maximize_window () #瀏覽指定的網頁 driver . get ( pageSource ) #指定要存的檔案路徑和檔名 n = os . path . join ( "D: \\ somewhere" , "savePage.html" ) #網頁存檔 savePageSource ( n ) #關閉瀏覽器 driver .close () driver...