2020年3月12日 星期四

如何在Ubuntu 18.04上安裝Redmine


參考以下影片

https://www.youtube.com/watch?v=vaRwqhImDVU


# su root
# apt-get install apache2 libapache2-mod-passenger
# apt-get install mysql-server mysql-client
# mysql -u root -p
# apt-get install redmine redmine-mysql
# gem update
# gem install bundler
   
# vim /etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
  PassengerDefaultUser www-data
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>


# ln -s /usr/share/redmine/public /var/www/html/redmine
     
# vim /etc/apache2/sites-available/000-default.conf

       ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
<Directory /var/www/html/redmine>
RailsBaseURI /redmine
PassengerResolveSymlinksInDocumentRoot on
</Directory>


 # service apache2 restart
# touch /usr/share/redmine/Gemfile.lock
# chown www-data:www-data /usr/share/redmine/Gemfile.lock
# chown -R www-data:www-data /etc/redmine/default/



2017年6月28日 星期三

Chapter 1: Hello world kernel module

簡單記錄一下第一支kernel module


#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h>   /* Needed for the marcos */

MODULE_LICENSE("GPL");

static int __init hello_init(void)
{
    printk(KERN_INFO "Hello world\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "Goodbye~~~\n");
}

module_init(hello_init);
module_exit(hello_exit);



 Makefile

obj-m += hello.o

KERNEL=/lib/modules/`uname -r`/build

all:
    make -C $(KERNEL) M=$(shell pwd) modules

clean:
    make -C $(KERNEL) M=$(shell pwd) clean

module_init()以及module_exit()是kernel module初始化的起點,所以是kernel module不可或缺的要素。module_init()以及module_exit()裡面代的參數分別是起始與結束的函數。從例子可以看到起始函數是hello_init()而結束函數是hello_exit()。
因此當用insmod去載入編譯好的ko檔時,透過dmesg可以看到字串"Hello world",而用rmmod時可以看到字串"Goodbye~~~"。

當要在kernel裡面秀出message時要透過printk()來達成,printk的用法跟printf很像,只是printk要加入message的level(Ex: KERN_INFO, KERN_DEBUG)。

To be continued....

2017年5月30日 星期二

Linux kernel 學習心得


    大約半年前從Non-OS的世界跨到embedded linux世界,
這巨大轉變可以對我來說可以說是非常艱辛阿,
雖然以前在學校有學過linux系統,但早就忘光光啦!

    學Linux kernel一開始翻網路上的資料以及身邊朋友的推薦就先看了傳說中的Linux聖經書"Linux Device Drive, 3e" (作者是 Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman)。在看LDD之前我對linux kernel的認識可以說是零,也就是完全不認識!在這情況下去看LDD可以說是非常痛苦... 雖然書中有提供例子參考,但是我連第一個例子都不知道要怎麼下make去build出kernel的ko檔,硬是死讀了幾章之後發現這樣下去不行,書中的介紹很多(字超級多!! 作者怎麼這麼會啦賽...),但是我一點都看不懂在說什麼,於是找另一本書來看。

    第2本書"Linux Device Driver Programming驅動程式設計" (作者是平田豐) 。這一本才真正開啟我對Linux kernel的大門,為什麼哩?因為書中有明確的例子可以參考!!!Oh my god! 有範例才是王道阿!!而且還是可以執行的範例,不是那種辛苦打了範例程式碼之後,結果make一直過不了,e04! 有了實際例子可以編譯並執行,我才真正可以體會每一段程式碼在幹什麼且會達到怎樣的效果。所以這本非常適合沒有任何底子的初學者來看,非常快就上手! 當初要是早點看這本書的話,工作上就不會被電得不要不要的... (但這又牽扯到新人訓練跟公司環境問題,唉~ 無奈啊~,有實力的人不一定懂得如何教人...)。

    還好只是想了解linux kernel的基礎知識,修改kernel code的機會不大,至少對於kernel code的寫法以及架構有比較清楚的認識了。接下來還有user space的東東要學,感覺這也是一個蠻龐大的東西啊...

2016年9月28日 星期三

vim error E212: Can't open file for writing

以前在Linux環境下用root習慣了,要做任何事情都沒有問題,
現在用一般帳號登入就開始遇到一些之前沒遇到過的問題。
這次在用vim要存檔案時出現錯誤訊息 E212: Can't open file for writing
由辜狗大神發現如果是在vim要存檔時出現E212錯誤訊息是要透過以下的指令存檔
:w !sudo tee %
然後選L,就可以存檔了~~~

最保險的方式就是每次要用vim時在下命令時都要用sudo,如下
sudo vim FILE_NAME


2016年7月22日 星期五

#define 簡單心得記錄


用過C語言的人都知道 #define 是用來定義巨集(macro),基本用法如下

#define PI 3.14159

這樣在程式碼中如果有出現 "PI"這個字的話compiler都會自動轉成3.14159。


#define也可用來定義函式,範例如下

#define getmax(a,b) a>b?a:b




如果在#define裡面#及##有特殊的用法,#會將接在後面的參數轉成string。
##則是會將2個參數串接在一起,用以下範例說明。

Example 1:
#define str(x) #x
cout << str(test);


cout << str(test); 會被轉成 cout << "test";


Example 2:
#define glue(a,b) a ## b
glue(c,out) << "test";


glue(c,out) << "test";會被轉成 cout << "test"

2016年7月21日 星期四

Linux掛載及卸載USB隨身碟

簡單記錄一下如何掛載USB隨身碟


1.先執行fdisk,檢查USB隨身碟是被系統辨識成那個裝置
fdisk -l

sda 基本上都是硬碟,我們可以藉由容量來確認隨身碟的編號
假設為sdb
2.建立USB隨身碟的掛載點:
mkdir /mnt/usb

3.掛載USB隨身碟
mount -v -t auto /dev/sdb /mnt/usb_storage

-v 顯示資訊
-t auto 讓系統自動分辯檔案系統

4.到 /mnt/usb_storage 可看到usb的內容


卸載USB隨身碟
umount /mnt/usb_storage

Ubuntu unknown filesystem type 'exfat'


在mount USB隨身碟時出現"mount: unknown filesystem type 'exfat'"這個錯誤訊息,

解法如下


Ubuntu版本是14.04之後的執行以下的指令去安裝套件

sudo apt-get install exfat-fuse exfat-utils