CentOS 7 upgrade kernel

查看目前 kernel 版本 > uname -a Linux R350-1 3.10.0-1160.53.1.el7.x86_64 #1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 添加 ELRepo 公鑰 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安裝 ELRepo yum 來源 rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 查看可用的 kernel yum --disablerepo="*" --enablerepo="elrepo-kernel" list available 安裝最新的 kernel,挑一個安裝,這邊選擇 kernel-lt kernel-lt 為長期支援版 kernel-mt 為 linus 個人維護版 yum --enablerepo=elrepo-kernel install kernel-lt 查看目前已安裝的 kernel sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (5....

2022-02-20 · 1 min · 105 words

改善 Proxmox VE/Debian 始終跑在最高頻率

這幾天把便宜撿到的 Threadripper 2950X 平台也上 Proxmox VE 玩玩了,裝完系統後才發現自己太習慣於 windows 下的電源管理,一直都沒發現 linux 下 CPU 頻率都是拉滿的狀態,找了debian 下進行電源管理的電源計畫設定教學達到降溫省電,順便做做紀錄。 此篇文章的硬體基於 root@raiven:~# neofetch _,met$$$$$gg. root@raiven ,g$$$$$$$$$$$$$$$P. ----------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Host: HP Z2 SFF G4 Workstation ',$$P ,ggs. `$$b: Kernel: 5.4.106-1-pve `d$$' ,$P"' . $$$ Uptime: 276 days, 9 hours, 51 mins $$P d$' , $$P Packages: 719 (dpkg) $$: $$. - ,d$$' Shell: bash 5.0.3 $$; Y$b._ _,d$P' Terminal: /dev/pts/1 Y$$....

2022-01-09 · 2 min · 311 words

logitech media server 搭配 docker 實現雙機分離

前言 雖然官方 releases 頁面似乎還沒發布,不過前一陣子把 piCorePlayer 升級到 8.1.0,看起來似乎還是 unstable,懶得倒版回去 8.0.0,趁這個機會把一直想玩的雙機留兜起來。 雙機顧名思義為 client 與 server 分開在兩台機器上,piCorePlayer 的 client 為 Squeezelite,server 則為 Logitech Media Server,事實上在 windows 上也有 client Squeezelite-X可以玩,預期中的最終成品將會是「三機流」吧 XD LMS 解決方案 採用 lms community 的 docker image lmscommunity/logitechmediaserver 作為這次 server 端的 service。 安裝流程 此篇文章使用 portainer 作為 GUI 方便演示,若熟悉 docker 與 k8s 的可以自行下指令安裝。 首先我把我的音樂都存放在 NAS 上,先將 music 資料夾給共享出來 接著到 portainer 中建立三個 volume a. lms-music 輸入在 NAS 分享出來的目錄與使用者、密碼,建立一個 cifs mounted volume b. lms-config c. lms-playlist 接著到 stack 中,複製貼上官方的 docker-compose,若 portainer 已經佔用了 port 9000,則需要更改暴露的 port port:port/tcp 並追加環境變數 HTTP_PORT=port,我最終的 stack 設定為: lms: image: lmscommunity/logitechmediaserver volumes: - lms-config:/config:rw - lms-music:/music:ro - lms-playlist:/playlist:rw - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro ports: - 9002:9002/tcp - 9090:9090/tcp - 3483:3483/tcp - 3483:3483/udp environment: - HTTP_PORT=9002 restart: always 點下 Deploy the stack 後就完成了 可以到 container 下看是否已經啟動完成了,並稍微記一下 container 的 hash,在稍後 windows 的設定中會出現。 piCorePlayer 設定 進入到 piCorePlayer web 中的 Squeezelite Settings 設定頁面,並在 LMS IP 中輸入 portainer 的 ip 位置後點擊 Save,大功告成。 接著到 portainer_id:9002 中就可以看到 lms 的畫面了 Squeezelite-X 設定 windows 中的 Squeezelite 設定更為簡單,到 Microsoft Store 取得並安裝 Squeezelite-X後打開,整個 logitech media service 似乎已經整合好 service discovery 了,直接在設定頁中的 Host 中看到剛剛起好的 docker container name 結語 lms 社群看起來還是有很多人在維護,設定起來十分簡單,數位流追求的就是方便...

2021-12-04 · 1 min · 199 words

A=B 遊完心得、解法

Steam 上推出了一款 A=B,稍微玩了一下,下面提供自己的解法。 小試了一下,這個迷你語言每一行由左側、等號=、右側組成,左側會被取代成右側,並且每次取代完都會從第一行重新開始,有點像在寫遞迴。 第一章 A=B 1-1 a取代成b,限定一行。 a=b 1-2 變成大寫,限定三行。 a=A b=B c=C 1-3 去掉重複的,限定三行。 aa=a bb=b cc=c 1-4 去掉連續的a,限定兩行。 aaa=aa aa= 1-5 只會給 a 與 b,回答最多的是 a 還是 b,最多四行。 ab= ba= aa=a bb=b 1-6 排序,最多三行。 ca=ac cb=bc ba=ab 第二章 新的關鍵字 多了一個新的關鍵字 return,僅能修飾右側語法,並且要用()包起來 2-1 回答 helloword,最多一行。 =(return)helloworld 2-2 是否至少包含三個 a,最多四行。 b= c= aaa=(return)true =(return)false 2-3 字數除以 3 的餘數,最多六行。 c=a b=a aaa= aa=(return)2 a=(return)1 =(return)0 2-4 ca=ac ba=ab cb=bc aaa=a bbb=b ccc=c aa=(return)false bb=(return)false cc=(return)false =(return)true 2-5 aaa=aa aa=d bbb=bb bb=d ccc=cc cc=d ab=(return)false ac=(return)false ba=(return)false bc=(return)false ca=(return)false cb=(return)false d= a=(return)true b=(return)true c=(return)true =(return)false 2-6 ba=ab ca=ac cb=dc bc=d bd=db ad= a=(return)false b=(return)false c=(return)true =(return)false 2-7 ba=ab ca=ac cb=bc ab=d ad=da da=aa ac= bc= d=b cc=c bb=b aa=a

2021-10-13 · 1 min · 118 words

Kubernetes 學習筆記 - Ubuntu kubeamd 建置 cluster

環境 物理機: 2278G/16G DDR4 ECC*4/1T MX500 OS: - master: Ubuntu server 20.04 - node: Ubuntu server 20.04 安裝 docker、kubeadm、kubelet、kubectl 安裝 docker sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -y sudo usermod -aG docker $USER 登出再登入 安裝 kubeadm kubelet kubectl sudo apt-get install -y apt-transport-https curl sudo su curl -s https://packages....

2021-09-19 · 2 min · 293 words

Prometheus 學習筆記 - 基本架構與資料結構

Prometheus Overview 架構 Exporter: 要被採集的目標 job 中曝露 metrics 的組件,負責轉換資訊成 prometheus 可解讀的格式。由於某些早於 prometheus 的 service 因為某些原因,不想主動在服務中曝露 metrics,故可以用一些額外的 exporter 將這些 service 中的 metrics 轉成 prometheus 格式,並曝露埠。 node exporter mysql exporter Push Gateway: 由於有些任務時間太短,可能不到 prometheus pull 的週期,可讓這些 jobs 主動把 metrics push 到這個 push gateway,好讓 premetheus server 可以 pull。 Prometheus Server Retrieval(retrieval system): 主要負責 pull 指定的 target # /etc/prometheus/prometheus.yml scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node_exporter" static_configs: - targets: ["localhost:9100"] TSDB: 時間序列資料庫,存放 pull 到的 metrics HTTP Server: 為 PromeQL 查詢提供接口 Service Discovery: kubernetes: 自動發現 k8s 中 pod 增加減少以及 probe 異動等等 file_sd: 通過 config 實現服務的自動發現 Alert Manager: 當 prometheus server 發現某某某 job 已經達到設定好的通知閾值進行通知的 service。 PromeQL: 無論是自帶 web UI 或是串接 Grafana,都是通過 http 進行 PromeQL 查詢後做視覺化處理 TSDB 中的時間序列資料。 資料結構 下面範例中會有更詳細說明...

2021-09-18 · 3 min · 638 words

Raspberry pi 4 + piCorePlayer 7.0.0 折騰筆記

前言 鑒於想要剛好逛到 Raspberry pi 4 出了(2019),剛好手邊又有兩顆閒置的喇叭,於是產生了做一套網路串流音樂撥放器。用到的硬體如下: Raspberry pi 4b 4G ver 1.2 樹莓派的部分選用 4G 版本,由於 4G 跟 8G 版本差價有點大,僅作為多媒體撥放器,應該不需要那麼大量的記憶體,故降梯成本僅選用 4G 版本。 至於 1.2 版本差在哪裡可以參考這篇文章,主要修正了 type-C 供電問題。 Argon ONE m.2 由於 pi 4b 的 cpu 較 3b+ 升級很多,同時發熱量也提升了,故得選用一個同時具有散熱、美觀、擴充的外殼,剛好手邊有汰換下來的 m.2 SATA SSD,於是選擇了 Argon ONE m.2。 直流電源供應器 儘管線性電源如 Keces P3 或便宜一點 ifi iPower X 或是老虎魚都是很好的穩定 5V 直流電源供應器,但由於使用樹莓派就是不想花大錢,用比系統本身還高價如此多的周邊,似乎有點本末倒置,魚是只用了手機的 type-C 5V/3A 變壓器作為電源供應器。 硬體安裝 硬體安裝部分不在這次探討範圍,由於每個人使用的外殼均不相同,文章中就假設是裸機設定。 系統選擇 由於是第一次接觸 Raspberry pi as audio player,一開始是看到 Volumio 與 Moode 等等,也實際安裝了一次 Volumio,但由於慧根不夠(X),或是不知道撞到了什麼,只要不小心設定錯音訊,便會導致系統無法撥音樂,也懶得 debug 了,於是想說乾脆來挑戰看看 piCorePlayer。...

2021-05-02 · 4 min · 799 words

Golang 學習筆記 Day 0 - Why Golang & 安裝篇

免責聲明,此篇為個人學習筆記,非正式教學文,僅供參考感謝指教,有任何內容錯誤歡迎發 issue。 Why Golang 在高中時期,除了一年級上學期是用 C 打開程式大門之外,大家都知道的,畫金字塔、 cin 、 cout 等等基本的邏輯觀念,一年級下學期開始就是 C#、HTML、PHP,也玩轉在 CPLD、Arduino、焊三角錐、兩根同軸焊接,總之就是全部吃掉就對了,雖然都是皮毛但不至於完全沒印象。 然而到了大學,敝人不才沒有考上一般大學,也沒考上工科第一二志願科大,在整個大學過程碰了最多的反而是 python、machine learning。然而也都是碰皮毛因為都在玩社團、學攝影,事實上在大學時期程式功力已荒廢大半。 所幸在實習期間,公司願意提供環境讓我邊學習邊成長後做出貢獻,而使用的後端語言是 PHP,然而就一年以來的使用 PHP 有以下優缺點: 學習曲線極低,但坑很多 解釋型腳本語言部署極方便 非靜態、非強行別、萬用 array 導致容易出現很多偷懶的 code 窮人聖經 LAMP、LNMP 歷史悠久 framework 眾多、工作好找,甚至有許多 C 底層的高校框架可以使用。 可以很 OO 也可以不 OO,寫 code 彈性極大 在 php 7.0 改用 zend 引擎後效能改頭換面,「原來 PHP 也可以寫遊戲」。搭配一些 C 底層框架,甚至可以跟 nodeJS 一較高下,而期望中 8.0 效能將再更高。 但是,再快也只是 AE86,腳本語言終究與「高效」存在矛盾,同時,與其在 PHP 中配合 IDE 使用 type hinting 自我約束,何不直接寫強行別語言呢?? 然而在看過許多主流 web service 語言後,最後決定來學學 Golang,而關於 golang 的優勢,可以點擊下方圖片看更多詳細。 Install for windows Step....

2020-08-25 · 2 min · 297 words

Golang 學習筆記 Day 1 - Getting started

免責聲明,此篇為個人學習筆記,非正式教學文,僅供參考感謝指教,有任何內容錯誤歡迎發 issue。 在前一天介紹了為何要使用 golang、安裝過程以及基本的 hello world,這天將重點放在最基本的 golang 程式碼特徵。 packages 正如昨天關於 hello world 的解析中提到的,每個程式都是由一到多個 packages 組成的,也就是 .go 中必須宣告該檔案是哪個 package,且同一個資料夾中僅接受 xxx 以及 xxx_test 兩種 package名稱,也就是該 package 的名稱以及測試檔的「測試包」。 至於 package 要怎麼命名呢,首先要提到檔案該如何命名,雖然 go format 是對於程式碼風格十分嚴格的,但是對於檔案名稱似乎就沒那麼嚴謹,但整個社群中普遍會用 snake_case 或是 dash-case 作為檔案 (甚至是 package) 的命名。 aaabbbccc.go time-machine.go battery_charger.go 但是需要注意的是 go build 會忽略所有以 _ 或是以 . 作為結尾的後綴, underline 可能會導致在建構時被忽略。 再來提到 package 到底要如何命名呢,官方文檔中明確的提到不要用 camelCase 以及 snake_case 。 The style of names typical of another language might not be idiomatic in a Go program....

2020-08-25 · 2 min · 383 words

RESTful server based on golang

很高興有個機會製作面試前的測試作業,也就趁這個機會做個筆記以及學習紀錄。 前置作業 先點列一下項目需求: 基本需求 based on golnag The API interface you provide can be any of the following:RESTful、json rpc、gRPC At least two sources When a source is unavailable, the result of its last successful ask is returned Use git to manage source code Write readme.md and describe what features, features, and TODO which have been implemented 額外可選 Traffic limits, including the number of times your server queries the source, and the number of times the user queries you Good testing, annotations, and git commit An additional websocket interface is provided to automatically send the latest information whenever the market changes Users can choose to use an automatic source determination, the latest data source, or manually specify the source of the data Package it as a Dockerfile, docker-compose file, or kubernetes yaml There is a simple front-end or cli program that displays the results The API you provide has a corresponding file, such as a swagger, or simply a markdown file Other features not listed but that you thought would be cool to implement 這邊就必須要先打預防針了,這篇僅為學習筆記,並非正式教學。且,我只是 Golang 初學者,所以這篇內也不會出現什麼高等級的解法,甚至也是第一次實作介接 API 呢 (笑)。而 DB 以及 redis 都是直接以方便使用去寫 dbi 而已並無用抽象曾去封裝,也進而導致 unit test 十分困難先擱置了,有空才會再針對性重構,而此次就先將目標專注在 API 介接。...

2020-03-19 · 5 min · 974 words