跳到主要內容

發表文章

修改 MariaDB 預設儲存目錄.md

修改 MariaDB 預設儲存目錄 三年前寫了關於修改 MySQL 預設存放資料夾的記錄「 在 uBuntu 中移動 MySQL 的資料存放位置 」,經過這幾年的改變和 Oracle 買下昇陽後 MySQL 的轉變,目前已經習慣使用 MariaDB(原 MySQL 創辦人)作為 LAMP 中的 M 。再記錄 MariaDB 中預設儲存目錄如何修改。 OS: UBuntu 16.04.3 Server x64 DB: MariaDB 10.2.12 方法上和先前 MySQL 設定大同小異 停止 MariaDB 服務 $ sudo systemctl stop mariadb 建立新的存放目錄位置(如: /db/mariadb ) $ sudo madir /db/mariadb $ sudo chown mysql.mysql /db/mariadb 複製目前目錄下的內容至新的存放目錄位置 $ sudo cp -rp /var/lib/mysql/* /db/mariadb 修改 MariaDB 設定檔,Ubuntu 位置為 /etc/mysql/my.cnf $ sudo vim /etc/mysql/my.cnf 將 [mysqld] 下的 datadir 修改為新的位置 [mysqld] ... datadir = /db/mariadb ... 重新啟動 MariaDB $ sudo systemctl start mariadb
最近的文章

如何更改 Docker image 預設安裝資料夾

如何更改 Docker image 預設安裝資料夾 一開始規劃 ubuntu partition 的時候, /var 雖然有獨立成一個新的 partition,但因為有特別安排了一個 partition 專門給 MariaDB(MySQL)使用,所以 /var 也就沒有給的特別大。這一陣子開始使用 docker 作為開發環境,docker 的 image 預設是儲存於 /var/lib/docker 路徑下,會佔用 /var 很多空間,希望能將預設的路徑移到別的 partition。 在不同版本的 Linux 下設定方式會有些不同,在 Stackoverflow 有許多討論,另外在 Travis 這篇文章 中也有直接提供一個 shell script 可以修改 ubuntu 16.04 下的預設路徑。 在 Docker doc 中發現官方的設定,相對簡單,在自己嘗試後可以適用,分享我在 ubuntu 16.04 下的設定方式,設定後不用重新開機即可套用。 OS:Ubuntu 16.04 .3 LTS (Xenial Xerus) Docker Version : 17.09 .0 -ce Docker daemon 設定檔 Docker 官方建議的方式為在 daemon.json 檔案中設定 daemon flags, daemon.json 在 Linux 中預設位置在 /etc/docker/ 。在 ubuntu 16.04 中預設這個檔案不存在,可以手動新增這個檔案。 $ sudo vim /etc/docker/daemon.json 在檔案中加上下面的內容,graph 為執行與存放的路徑位置: { " graph ": "/mnt/docker-data" , " storage-driver ": "overlay" } 更新修改內容與重新啟動 Docker 更新套用修改內容: $ sudo systemctl daemon-reload 重新啟動 Docker: $ sudo systemctl restart docker 重新啟動後,在 graph 指

SSH tunnel 方式連結限制區域的伺服器

SSH tunnel 方式連結限制區域的伺服器 自從進了前公司,好久沒有時間好好的更新部落格內容了。近期離開待了將近兩年的公司,和好朋友一起創立了新的新創公司,一起在農業上用技術來幫助返鄉的青小農,希望讓用更有溫度的數據來降低青農們的門檻。 新的開始新的期待,希望自己能繼續保持赤子熱忱,把研究過的方法記錄下來分享。 在這個資安即國安的時代(嗯…那是政府的口號),大部分的伺服器都會有許多的安全設定,無論是更新的規則或是防火牆的限制等等。會限制在某個網段甚至是某個 IP 才能進行連線某些服務,對於常常喜歡加入文青到咖啡廳 Out coding 的宅宅,還是要想辦法鑽回去連線伺服器。 如果在限制區域中有一臺能對外開放連線的 SSH 機器,我們便能夠使用 SSH Tunnel 的方式橋接回去,透過通道連結到目標伺服器。說穿了其實這臺對外的機器就是跳板,我們可以利用這個跳板以類似 Port forwarding 的方式,將遠端伺服器的 IP 與 Port 對應至本機的一組位址與 Port。 Linux 下的連接方式 大部分的 Unix-Like 系統都有內建 SSH 的 Client 指令,我們只需要在 terminal 下指令就可以達到目的。 指令如下: $ ssh - N -f - L LOCAL_PORT :DEST_HOST :DEST_HOST_PORT SSH_USER @SSH_SERVER_IP SSH 參數說明 -N : 連接後不執行任何的遠端指令 -f : 連線後在背景執行 -L port:host:hostport: 在 Client 與 Server 建立一組 secure tunneling LOCAL_PORT :本機連接埠 DEST_HOST :目標連線伺服器位址 DEST_HOST_PORT :目標連線伺服器埠號 SSH_USER@SSH_SERVER_IP :做爲跳板的機器連線 Example: $ ssh -N -f -L 33890 :192 .168 .1 .100 :5022 username @ 168.95.1.1 上述的例子,會透過 168.95.1.1 這臺跳板機器,將限制區域內 192.168.1.100,Port

使用者只能 SFTP 登入自己的家目錄

使用者只能 SFTP 登入自己的家目錄 老師的電腦動畫課堂的期末作品,是開放讓學生透過 FTP 上傳自己的作品及網頁至實驗室的伺服器,由於 FTP 是明碼的封包傳輸於最近升級系統後,便考慮改用 SFTP(SSH File Transfer Protocol)來提供上傳的服務。 提供 SFTP 上傳的同時,希望使用者和以前一樣只能使用 SFTP 無法使用 SSH 登入伺服器。SFTP 為 SSH 的檔案傳輸服務,預設建立帳號的時候使用者同時可以使用這兩種服務。透過 SFTP only + Chroot 設定我們能限制使用者僅能 SFTP 並且無法離開自己的家目錄去到處閒晃。 安裝 OpenSSH 如果安裝的是 Ubuntu Server 應該在安裝過程會安裝 openssh-server 套件,沒有的話可以利用下面的指令安裝。 $ sudo apt-get install openssh-server 新增一個給 SFTP 使用的群組 sftpaccess $ sudo groupadd sftpaccess 修改 OpenSSH 設定檔 編輯 /etc/ssh/sshd_config 設定檔,在約 77 行的地方找到 Subsystem sftp /usr/lib/openssh/sftp-server 註解此行並修改為 Subsystem sftp internal-sftp 。 $ sudo vim /etc/ssh/sshd_config #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp 在檔案的尾端加上下面的片段 Match group sftpaccess ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 建立新的使用者並加入 sftpaccess 群組 在設定檔中,我們設置了 sftpaccess 這個群組套用要做 ChrootDirectory 的設定,所以我們將要限制的使用者,加入這個群組中。 $ sudo useradd

雙系統升級 Windows 10 後造成 ubuntu 開機進入 grub rescue

雙系統升級 Windows 10 後造成 ubuntu 開機進入 grub rescue 7/29 是免費升級 Windows 10 的最後期限,雖然現在幾乎都使用 ubuntu 做為平時工作或一般使用的環境,鮮少使用 Windows 了,但是現在使用雙系統的方式,仍保有原本購買筆電附送的 Windows 8.1 。微軟這免費的升級的活動還是很吸引人,經過將近一年時間的改善,現在的 Windows 10 好像也沒有什麼災情,決定在這個截止日前升級。 升級完 Windows 10 重新開機後,系統就直接進入 grub rescue 模式,估計是原來磁區的位置號碼改變所致。只要找回之前開機的磁區修改正確就好了。 查詢原本的開機磁區 以 ls 指令查詢磁區情形 grub rescue > ls (hd 0 ,gpt1) (hd 0 ,gpt2) (hd 0 ,gpt3) (hd 0 ,gpt4) (hd 0 ,gpt5) (hd 0 ,gpt6) 逐步以 ls 看能不能查詢目錄情形,找出開機磁區 grub rescue> ls (hd0,gpt1)/ grub rescue> ls (hd0,gpt1)/boot grub rescue> ls (hd0,gpt2)/ grub rescue> ls (hd0,gpt2)/boot ... 以此類推。記錄下查詢到的磁區位置(我的是 (hd0,gpt6) ),後面會使用上。 離開 rescue 進入 normal 模式 在 rescue 提示符號( grub rescue> )輸入 set 查詢現在的 prefix 和 root 設定值。 grub rescue> set prefix=(hd0,gpt5)/boot/grub root=hd0,gpt5 使用 set 指令將 prefix 和 root 更換成正確的磁區號碼,我的是將 (hd0,gpt5) 更改為 (hd0,gpt6)。 grub rescue> set prefix=(hd0,gpt6)/boot/grub grub rescue> set root=(hd0,gpt6) 再次檢查 prefix 和 roo

StackEdit 自定 CSS 匯出 HTML Template

StackEdit 自定 CSS 匯出 HTML Template StackEdit 是一個所見即所得的線上 Markdown 編輯器,在先前的文章已有許多的介紹。身為程式設計在寫筆記的時候更是需要像這樣的工具,讓我們更能聚焦在內容上並且能運用 highlight.js 來標註程式碼。 檔案分享的方法 Google 雲端硬碟、Dropbox 我們更可以將筆記透過 StackEdit 直接發佈至 Google Blogger 上,或是儲存在自己的 Google 雲端硬碟、Dropbox 等等的位置。 Gist、StackEdit Viewer 如果需要將資料分享給其他沒有安裝 Markdown Viewer 的人,除了使用上述的方法,我們也可以將檔案發佈至 Gist ,或是將我們的 Markdown 檔案放至網路,透過 StackEdit 的 Viewer 將網址引入直接使用瀏覽器觀看。Ex: Here 。 https://stackedit.io/viewer#!url= [ 放置 Markdown 檔案的 URL 位址 ] PDF StackEdit 的 PDF 功能是需要透過雲端的轉換(透過 Pondoc + LaTex 實踐),對於這個部分的功能是贊助者項目,如果覺得 StackEdit 好用,很建議大家贊助讓他們可以更長久的經營。另外一個方式,是利用 StackEdit Viewer + Chrome Browser 來實踐。 開啓 Chrome Browser 開啓 StackEdit Viewer:Menu –> StackEdit Viewer 在 Viewer 模式下開啓列印 選擇 「Save as PDF」 HTML 另外一種跨平臺支援的方式是使用 HTML,只要是有瀏覽器都可以觀看,而且透過 CSS 可以改變成我們自己想要變化的風格。也是今天主要想和大家分享的方法。 使用自定的 CSS 匯出 HTML 檔案 StackEdit 匯出 HTML 的方式所匯出的檔案是很陽春白白靜靜的檔案,無論字型還是區塊安排都會有一點點的悲劇。還好,它還提供了一個以自定 Template 來匯出 HTML 的方式,讓我們有機會透過自定的 CSS 檔來

uBuntu /boot 空間 100% 滿載問題

uBuntu /boot 空間 100% 滿載問題 在先前的文章「 uBuntu 更新時 /boot 空間不足 」中,有針對如果 boot 空間不足的時候該如何以 apt-get purge 的方式移除舊的 kernel-package。現在可以使用 apt-get autoremove old-kernel-package 的方式移除,如果不指定 kernel-package 的版本,則會移除現在所有的舊版本。 sudo apt-get autoremove linux-image- 3.13 . 0 - 51 -generic linux-image- 3.13 . 0 - 51 -generic 這個方式也會一併的移除相依套件,相當的安全又乾淨(愈來愈無腦操作了 =,.=)。先前 purge 方式是在 /boot 還有空間的時候移除舊版,最近碰上的問題則是 /boot 空間已經 100% 滿載,新的 kernel 又只有裝一半(相依套件未完成安裝),導致任何的 apt-get 方式都無法使用,系統提示要以 apt-get -f install 方式強制解決新 kernel 的相依問題,而 /boot 又沒有任何空間,進入 Deadlock 狀況… 對於這種狀況的解法, 我們先清理出一些 /boot 的空間 # 切換至 /boot 目錄下 $ cd /boot # 確認目前運行的 kernel 版本 $ uname -r # 備份舊的 kernel 版本 $ sudo tar -cvf ~/boot.tar * 3.13 . 0 - 36 -generic * 3.13 . 0 - 37 -generic # 刪除已經備份的內容 $ sudo rm -f * 3.13 . 0 - 36 -generic * 3.13 . 0 - 37 -generic Note 完成後面的相依性安裝需要一些空間,請試需要移出足夠的空間。 解決套件相依性問題 $ sudo apt-get -f install 使用 autoremove 方法清除舊版本 $ sudo apt-get autoremove 重新開機就會套用新的 kernel 版本。 參