發表文章

目前顯示的是 3月, 2012的文章

Securing Data

本文主要出自於參考轉載 Weithenn, Unit3-Securing Data Lab1. 設定 SSH key with no passphrase Server1 主機利用 SSH 方式登入 Client 主機不用打密碼,產生的 SSH Key 未使用密碼進行保護,在 Server1 上設定資訊如下 #ssh-keygen -t dsa //產生 .ssh/id_dsa 及 id_dsa.pub (man ssh-keygen) #ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.0.100 //將 Public Key 複製到 Client 主機 IP 為 192.168.0.100 root@116.50.43.82's password: 密碼輸入正確後會將 Server1 端的 id_dsa.pub 複製到 Client 並自動改名為 authorized_keys,當然你也可以手動用 scp 複製然後改名 (man ssh-keygen),完成上述設定後以後從 Server1 主機利用 SSH 方式登入 Client 主機便不用再打密碼 [root@server .ssh]# ssh 192.168.0.100 //從 Server1 主機 SSH 欲登入 Client 主機 Last login: Sun Nov 8 10:03:34 2009 from server1.example.com //不用密碼即可登入 [root@client ~]# Lab2. SSH key with passphrase Server1 主機利用 SSH 方式登入 Client 主機不用打密碼,產生的 SSH Key 有使用密碼進行保護,在 Server1 上設定資訊如下 #ssh-keygen -t dsa //產生時有輸入 passphrase 來保護 SSH Key #eval $(ssh-agent) //啟動 ssh-agent Agent pid 18234 #ssh-add //ssh-agent 有啟動成功此指令才可順利執行 Enter passphrase for /root/.ssh/id_dsa: //輸入剛才設

Advanced Filesystem Management

本文主要出自於參考轉載 Weithenn, RH133 - Red Hat Enterprise Linux System Administration - RHEL 系統管理實務 Lab1. 建立 Software RAID-1 本次實作因為沒有多的硬碟可供實驗,因此在 hda 硬碟中建立二個 1GB 的空間來建立 Software RAID-1,當然實際情況您可能是使用硬碟代號 hdb + hdc 來建立 Software RAID-1。 #fdisk /dev/hda //進入 fdisk 互動模式 #p >> n >> enter >> +1G >> n >> enter >> +1G >> p >> w //建立二個 1GB 的空間 #partprobe //套用剛才的設定值 #cat /proc/partitions //系統可辨別新增的掛載點 3 7 987966 hda7 3 8 987966 hda8 新增完新的空間後建議在建立 Software RAID-1 以前先確定 md0 是否有內容 (是否曾經建立過 Software RAID) 詳細的用法可以 man mdadm,當然若完成後記得修改 /etc/fstab 使系統重開機時也能自動掛載 Software RAID 的空間。 -l 1: Level 1 (也就是 RAID-1) -n 2: 指定硬碟數量有 2 顆 #cat /dev/md0 //確定 md0 沒東西 (cat /proc/mdstat 也可) #mdadm -C /dev/md0 -l 1 -n 2 /dev/hda{7,8} //建立 Software RAID-1 (man

群播技術

群播: 是指在發送者和每一個接收者之間實現點對多點網路連接 實例操作 實現一個基於C/S模式的群播通信,伺服器程式負責建立群播組,並提供一個鍵盤輸入介面,輸入的資訊向組內成員群播發送;客戶端加入群播組,接收伺服器的資訊並顯示,若發現資訊中包含quit則退出程式 1.伺服器程式 #include "stdio.h" #include "sys/socket.h" #include "netinet/in.h" #include "arpa/inet.h" #include "netdb.h" #include "unistd.h" #include "stdlib.h" int main(void) { int server_socket; struct sockaddr_in address; server_socket = socket(AF_INET, SOCK_DGRAM, 0); if (server_socket < 0) { perror("socket"); return 0; } memset(&address, 0, sizeof(address)); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("224.0.0.1"); address.sin_port = htons(5555); while(1) { char buf[200]; printf("input your word:>"); scanf("%s",buf); if(sendto(server_socket, buf,sizeof(buf), 0,(struct sockaddr *)&address, sizeof(address)) < 0) { perror("sendto

廣播技術

廣播技術 廣播通信是一種通訊端程式設計技術,這種通信方式是採用單點發送,全網路接收的模式,能夠最大限度地利用頻寬,在當前的Internet中有很多業務是採用廣播技術. 1. ARP協議 ARP是英文Address Resolution Protocol的縮寫,是區域網路中的位址解析通訊協定,利用這個協議,可以找出IP位址到MAC位址的對應關係 2.NTP協議 NTP是英文Network Time Protocol的縮寫,是網路時間協定. 3.原理解析 要進行廣播通信,首先還是要理解廣播地址,在IP地址中,如果最後一個數字為255,則一定是一個廣播地址. 實例操作 實現一個基於C/S模式的廣播通信,伺服器程式負責建立廣播組,並提供一個鍵盤輸入介面,輸入的資訊向組內成員廣播發送;客戶端加入廣播組,接收伺服器的資訊並顯示,若發現資訊中包含quit則退出程式. 1.伺服器程式 #include "/sys/types.h/" #include "sys/socket.h" #include "arpa/inet.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include "netdb.h" #include "errno.h" #define BUFFSIZE #define PORT 5050 int main() { int serversocket; struct sockaddr_in serveraddress,clientaddress; int so_broadcast = 1; socklen_t size; if((serversocket=(socket(AF_INET,SOCK_DGRAM,0))) < 0) { perror("socket"); return 0; } if(setsockopt(serversocket,SOL_SOCKET,SO_BROA

利用 FreeNAS 打造儲存設備-歷史篇

圖片
本文主要出自於參考轉載 [OpenFoundry 電子報第 178 期 - 利用 FreeNAS 打造儲存設備 (1)-歷史篇] 於 2011 年 8 月 8 日出刊 前言 目前企業運作環境中對於共用儲存設備的存取方式,大約可以區分為三種類別,分別是:直接連接儲存 (Direct Attached Storage, DAS)、網路連接儲存 (Network Attached Storage, NAS)、儲存區域網路 (Storage Area Network,SAN)。其中儲存區域網路 SAN 又因為其所使用的傳輸媒體介質的不同,又可以細分為使用光纖作為傳輸媒介的 (Fiber Channel SAN, FC-SAN),以及使用一般乙太網路線材的 (iSCSI SAN, IP-SAN)。 不過目前商用市場及自由軟體專案中,許多的 NAS 設備除了既有的網路服務之外,同時具備了 iSCSI Target 的功能,因此可以提供 IP-SAN 的儲存環境也搖身一變,成為 SAN 設備。目前市場上 NAS 與 SAN 在界線劃分上已經日趨模糊,讀者可以從圖1、圖2 了解到 DAS、NAS、SAN 此三種共用儲存設備,對於應用程式 (Application)、檔案系統 (File System)、硬碟 (SATA、SAS、FC)、線材 (Fiber Channel、Ethernet) 等,在存取方式上的差異性,圖3 則為 NAS 與 SAN 的混合應用。在本次 FreeNAS 系列文章中所使用的 FreeNAS 雖然定位為 NAS,但它也可以提供 iSCSI Target 功能,來給予使用者更具彈性的應用。 [圖一、DAS、NAS、SAN 存取方式比較一 (圖片來源: 維基百科 – 存儲區域網路)] [圖二、DAS、NAS、SAN 存取方式比較二 (圖片來源: 維基百科 – 存儲區域網路)] [圖三、SAN-NAS 混合應用 (圖片來源: 維基百科 – 存儲區域網路)] 什麼是 FreeNAS? [FreeNAS] 為基於 [FreeBSD] 作業系統所開發的嵌入式 (Embedded) 開放原始碼 [網路連接儲存設備 (Network Attached Storage,NAS)],由 Olivier Cochard-Labbe 及 Vol

以Virtual Switch建置雲端虛擬網路交換機制(轉)

圖片
虛擬交換(Virtual Switch)顧名思義就是建立於虛擬平台上,透過軟體模擬出網路交換器的功能,其提供管理員能夠不依賴於實體網路和硬體,動態地重新配置虛擬環境中的網路架構。也由於其變動性較小,因此可減少網路和虛擬平台管理人員的負擔。 本文中將介紹一套以開放原始碼(Open Source)技術為基礎的虛擬交換器OpenvSwitch,透過實際部署安裝於Xen虛擬平台上的方式,針對虛擬交換機制作深入的分析與探討。 運作流程說明 在Xen的虛擬平台中,傳統上其內部網路主要由虛擬網卡與虛擬橋接器(Linux Bridge)所組成,兩者皆是由Hypervisor所模擬出來的軟體物件,提供虛擬機器橋接實體網路及虛擬機器之間彼此互相連線溝通機制。 而虛擬交換器(Virtual Switch)的介入,則帶給Hypervisor更多彈性化的功能來管控整體的虛擬網路架構。由於連接實體網路的硬體介面是由Hypervisor中的實體網路卡負責,其便可以直接成為虛擬交換器的uplink埠。虛擬交換器和Hypervisor間的互動架構則如下圖所示。 ▲虛擬交換器與Hypervisor間的互動架構。 首先,Xen會啟用一個Domain0負責做為後端驅動(netback),接收從各個虛擬機器(DomainU)中的前端驅動(netfront)所傳送的封包,其傳送的機制是透過共享記憶體的方式,將記憶體存取權限授與(grant)後端驅動,因此DomainU之間無法讀取未經授權的記憶體空間,也不會干擾到本身之外的封包儲存空間。 而Domain0的後端驅動在收到封包之後,則會交由虛擬交換器判別封包應轉發至何處,要往外透過實體網路卡發送,抑或往內送予其他虛擬機器,如此就完成整個虛擬網路的封包流向 優點與用途簡介 OpenvSwitch這款虛擬交換器具備很強的靈活性,可以在管理程序中作為軟體Switch運行,也可以直接部署到硬體設備上作為控制層 在Linux環境中可透過編譯成核心模組(Kernel Module)的形式運行於系統核心層內(kernel-based)以提供較佳的運行效能,或是以軟體的方式執行於系統應用層(userspace-based)讓使用者可靈活地操控。此外,O

Using ubuntu-vm-builder with libvirt to create VM and install os

What is vmbuilder With vmbuilder, there is no need to download a JeOS ISO anymore. vmbuilder will fetch the various package and build a virtual machine tailored for your needs in about a minute. vmbuilder is a script that automates the process of creating a ready to use Linux based VM. The currently supported hypervisors are KVM and Xen. What is libvirt The libvirt library is used to interface with different virtualization technologies. Step by step Check that your CPU supports hardware virtualization $ sudo apt-get install atfs $ egrep -c '(vmx|svm)' /proc/cpuinfo output != 0 表示有支援hardware virtualization Installation of KVM, libvirt, ubuntu-vm-builder $ sudo apt-get install kvm qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils $ sudo adduser YourUsername kvm $ sudo adduser YourUsername libvirtd check the groups exist $ groups Install Ubuntu VM builder sudo apt-get install python-vm-builder Modify /usr/lib/python2.7/dist-packages/VMBuilder/plugins/ubuntu/dapper.py def un

Subversion On CentOS 6

[Subversion On CentOS 6] 什麼是 Subversion? Subversion 是一個自由/開放源碼的版本控制系統, 也就是說 Subversion 管理著隨時間改變的檔案. 這些檔案放置在一個中央 檔案庫 (repository) 中. 這個檔案庫 很像一個尋常的檔案伺服器, 不過它會記住每一次檔案的 變動. 這樣你就可以把檔案回復到舊的版本, 或是瀏覽檔案的變動歷程. 許多人會把版本控制系統想像成某種 “時光機器”. 某些版本控制系統也是 software configuration management (SCM) 系統. 這些系統是特別設計來管理大量程式碼的, 而且具有許多功能, 專門用在軟體發展之用 — 像是可完全了解程式語言, 或是提供編譯軟 體的工作. 不過 Subversion 並不是這樣的系統; 它是一個泛用系統, 可用來管理任何 類型的檔案, 其中包括了程式源碼. [SVN 環境安裝] yum install mod_dav_svn subversion [Subversion 組態檔案初始化] vim /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so #載入mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so #載入mod_authz_svn.so # 定義SVN之Site: 192.168.0.151 後面接目錄/svn DAV svn SVNParentPath /var/www/svn #本Lab的儲藏庫路徑 AuthType Basic # 採用 Basic 驗證,與Web登入驗證配置有關 AuthName "SVN Test" # 登入使用者驗證時顯示之訊息 #SVNListParentPath on AuthUserFile /etc/svn-auth-users # .htpasswd 網頁登入驗證使用者帳密儲存路徑

Java Design Pattern

圖片
[Adapter pattern] public interface Print { public abstract void printWeak(); public abstract void printString(); } public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); } public void showWithAster() { System.out.println("*" + string +"*"); } } public class PrintBanner extends Banner implements Print { public PrintBanner(String string) { super(string); // TODO Auto-generated constructor stub } @Override public void printWeak() { // TODO Auto-generated method stub showWithParen(); } @Override public void printString() { // TODO Auto-generated method stub showWithAster(); } } public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Print p = new PrintBanner("Hello"); p.printWeak();

大型C++軟體設計

圖片
[定義: Uses-In-The-Implementation] 名稱 意義 Uses 該class有一個成員函式使用了該型別 HasA 該class嵌入了一個該型別的物件實體 HoldsA 該class嵌入了一個該型別的指標(或引用) WasA 該class private繼承於該型別 [Uses] class Crook { private: void bribe(); }; class Judge; void Crook::bridge() { Judge *bad = 0; }; [HasA 與 HoldsA] class Tower{}; class Cannon; class BattleShip{ Tower d_controlTower; Cannon *d_replaceableForwardBattery_p; Cannon& d_fixedAftBattery; }; [WasA] class Battleship{}; class Shop{}; class Exhibit; class ArizonaMemorial:private Battleship{ Shop d_giftShop; Exhibit *d_current_p; Exhibit& d_default; }; Member Data Access 主要設計規則: : 務必將class的成員變數宣告為private 如果其中一個class定義了public成員變數而在許多程式被使用,那麼一旦改變了該class成員變數的型態或格式,則那些程式必須大幅修改而且必須整個重新編譯 主要設計規則: 避免在檔案範圍內使用具外部連結性的資料 全域變數局部化: 1.將所有全域變數放到一個struct或class裡 2.接著將它們宣告為private並提供

Linux Knowledge

圖片
[SELinux] config --> /etc/sysconfig/selinux command --> setstatus setenforce 0(寬容模式) setenforce 1(啟動模式) [sudo 帳號管理機制] config --> /etc/sudoers command --> visudo log --> /var/log/sudo.log Sample: ## Sudoers allows particular users to run various commands as ## the root user, without needing the root password. ## ## Examples are provided at the bottom of the file for collections ## of related commands, which can then be delegated out to particular ## users or groups. ## ## This file must be edited with the 'visudo' command. ## Host Aliases ## Groups of machines. You may prefer to use hostnames (perhaps using ## wildcards for entire domains) or IP addresses instead. # Host_Alias FILESERVERS = fs1, fs2 # Host_Alias MAILSERVERS = smtp, smtp2 ## User Aliases ## These aren't often necessary, as you can use regular groups ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname #

openstack configuration

圖片
1.nova-api.conf DATABASE --sql_connection=mysql://nova:password@172.16.123.6/nova # LOGS/STATE --verbose --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --logdir=/var/log/nova --state_path=/var/lib/nova --lock_path=/var/lock/nova # RABBITMQ --rabbit_password=guest --rabbit_port=5672 --rabbit_host=172.16.123.6 # SCHEDULER --scheduler_driver=nova.scheduler.simple.SimpleScheduler # NETWORK --network_manager=nova.network.manager.FlatDHCPManager --fixed_range=192.168.100.0/24 --flat_network_dhcp_start=192.168.100.2 --public_interface=eth0 --flat_interface=eth0 --flat_network_bridge=br100 # GLANCE --image_service=nova.image.glance.GlanceImageService --glance_api_servers=172.16.123.6:9292 # COMPUTE --compute_manager=nova.compute.manager.ComputeManager --libvirt_type=qemu # VNCPROXY --vncproxy_url=http://172.16.123.6:6080 --vncproxy_wwwroot=/var/lib/nova/noVNC # MISC --use_deprecated_auth=false --allow_admin_api=true --enable_zone_routing=true #

Setup OpenStack (Diablo Release)

圖片
h1. Setup OpenStack (Diablo Release) 參考這個網頁去安裝 http://docs.openstack.org/diablo/openstack-compute/install/content/index.html Management Network (RFC1918 IP Range, not publicly routable): This network is utilized for all inter-server communications within the cloud infrastructure. Recommended size: 255 IPs (CIDR /24) Public Network (Publicly routable IP range): This network is utilized for providing Public IP accessibility to the API endpoints within the cloud infrastructure. Minimum size: 8 IPs (CIDR /29) VM Network (RFC1918 IP Range, not publicly routable): This network is utilized for providing primary IP addresses to the cloud instances. Recommended size: 1024 IPs (CIDR /22) Floating IP network (Publicly routable IP Range): This network is utilized for providing Public IP accessibility to selected cloud instances. Minimum size: 16 IPs (CIDR /28) Diablo Release 中新增加了 Keystone 及 horizon, 但剛 Release 時整合做的沒有很好, 老是會有一些怪怪的問題, 目前這篇的安裝寫的還滿清楚的, 也把一些問題解決了, 下面是我的安裝紀錄, 基本上都和網頁上的差不多,