搜尋此網誌

2016年5月31日 星期二

在 CENTOS7 下,透過EPEL 安裝 R


在 CENTOS7 下,透過EPEL 安裝 R

su -c 'rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm'

然後:
sudo yum install epel-release
sudo yum -y update
sudo yum -y install R

如果要安裝 R 的一些套件,使用 yum 搜尋 R- 開頭的套件:
yum list R-\*

安裝好之後,由終端機,執行 R


2016年5月30日 星期一

Linux MongoDB 徹底清除 replSet 狀態步驟

先關閉 replication 然後重啟 MongoDB 處於不具備replSet的執行狀態
接下來 輸入 mongo 以進入 MongoDB Console
進入後執行以下指令
use local;
db.dropDatabase();

下db.stats()確認結果看看
如果無誤離開 MongoDB Console

修改 replication 然後重啟 MongoDB 處於具備replSet的執行狀態
進入 MongoDB Console 檢查確認狀態。

Linux 查看程式佔用哪個port

例如:
查看 MongoDB 的 27017 被誰佔用著
lsof -i -P | grep -i "listen" | grep 27017

2016年5月29日 星期日

Hello Shiny!

第一次需要安裝套件
install.packages("shiny")
library(shiny)

範例:
runExample("01_hello")


shiny 產出的目錄匣,裡面有兩個程式碼檔案
server.R
ui.R

範例: 建立一個Hello World 目錄以及兩個檔案
setwd("C:/NTUTrainRL2")
dir.create("HelloWorld")
file.create("HelloWorld/ui.R")
file.create("HelloWorld/server.R")

修改了 兩個內容
server.R
ui.R

將以下的程式碼貼入`HelloWorld/ui.R
shinyUI(fluidPage(

  titlePanel("Hello World!"),

  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 5,
                  max = 30,
                  value = 15)#change min/max/default
    ),

    mainPanel(
      plotOutput("distPlot")
    )
  )
))

#將以下的程式碼貼入`HelloWorld/server.R`
shinyServer(function(input, output) {

  output$distPlot <- renderPlot({
    x    <- faithful[, 2]
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    hist(x, breaks = bins, col = 'skyblue', border = 'white')#change col
  })
})


#完成後,就使用以下指令執行
runApp("HelloWorld")

#將結果公開
到 shinyapps.io 申請一個帳號 https://www.shinyapps.io/
之後可以將 輸出結果 連結至 shinyapps.io
將申請下來的 token code (rsconnect......)
貼到 RStudio Console 執行即可。

執行過  Token 之後,然後到編輯區,找到 Publish Applications
將內容上傳至 shinyapps.io





RStudio 第一次啟用 R Markdown

RStudio 第一次啟用 R Markdown:
Menu File > New File > R markdown
會開始安裝套件

套件安裝好之後,從程式編輯區找到 knit HTML 功能,
按下去,輸出結果就會根據 R Markdown 修飾指令,影響輸出結果。
例如:

```{r}
summary(cars)
```
的輸出結果,與底下的輸出結果,是不同的。
指定echo=FALSE就不會印出summary(cars)的程式碼區塊但還是會印出結果。

```{r echo=FALSE}
summary(cars)
```

參考參數如下:
echo: (TRUE; logical)
results: (‘markup’; character)
markup
asis
hold
hide
warning: (TRUE; logical)
error: (TRUE; logical)
message: (TRUE; logical)

以下示範 連結 與 圖片 ,其中圖片部分,前面有加上 禁嘆號
# 連結
[點此連結至系統訓練班網頁](https://www.csie.ntu.edu.tw/train/)


# 圖片
![The Art of R Programming](image/rRuperman.jpg)


輸出 PDF 的話,須要在 windows 底下先安裝好 MikTeX 套件












2016年5月28日 星期六

類似 LINUX 的 PIPE 觀念 指令 %>%

%>%

例如, 使用 Pipe:

packs <- c("leaflet", "magrittr")
for (i in 1:length(packs)){
  install.packages(packs[i])
}
sapply(packs, library, character.only=T)

helloMap <- leaflet() %>%
  addTiles() %>% #把預設的地圖圖層加入
  addMarkers(lng=121.539366, lat=25.017326, popup="National Taiwan University")
helloMap


不使用 Pipe
# 如果你不習慣使用pipe run %>%
helloMap <- addMarkers(addTiles(leaflet()), lng=121.539366, lat=25.017326, popup="National Taiwan University")
helloMap



2016年5月26日 星期四

Linux MongoDB Replication

寫在前面,避免踩到地雷。因為架設了環境,省略了DNS SERVER存在,所以就在各DB主機上,直接修改  hosts 圖方便,讓各DB主機可以相互用 hostname 找到對方,而不是用 IP 位置來找彼此。但是要注意:

不可以在扮演仲裁角色(arbiters)的主機上,hosts寫成這樣
127.0.0.1    mongodb4 mongodb4.hgdata.com.tw
正確應該是
192.168.1.xx    mongodb4 mongodb4.hgdata.com.tw

否則仲裁角色主機會一直呈現 OTHER> 的提示,
從  telnet localhost 27017 失敗時候發現的
telnet localhost 27017 會失敗,但是
telnet 127.0.0.1 27017 卻成功。

=======================================
製作KEY ( 如不製作KEY 本節可以先忽略)
openssl rand -base64 741 > /var/lib/mongo/mongo-keyfile
chmod 600 mongo-keyfile
chown mongod.mongod /var/lib/mongo/mongo-keyfile
改 600 屬性,一定要作,不然無法啟動 MongoDB
把這 Key 放到每一台機器的 /var/lib/mongo/mongo-keyfile 檔案中。
接下來就要啟用 Replica Set 與認證模式。

vi /etc/mongod.conf

改以下

security:
  keyFile: /var/lib/mongo/mongo-keyfile

重啟 MongoDB 服務
systemctl restart mongod

=======================================
架構上,分別有4台  MongoDB Server
192.168.1.51 Mondb1
192.168.1.52 Mondb2
192.168.1.53 Mondb3
192.168.1.54 Mondb4  規劃轉成仲裁角色,用來分配其他三台成員的角色

開始:
vi /etc/mongod.conf

改以下
replication:
    oplogSizeMB: 10240
    replSetName: "rs1"

重啟 MongoDB 服務
systemctl restart mongod

=======================================
從 192.168.1.21 輸入 mongo 進去 concole
確認
rs.status()

初使化 replSet
rs.initiate()

再確認
rs.status()
會看到PRIMARY字眼,表示初始化完成

加入第二台DB
rs.add("192.168.1.22:27017")
rs.add("192.168.1.23:27017")
加入仲裁主機
rs.addArb("192.168.1.24:27017")

從 192.168.1.21 再確認
rs.status()

看到 192.168.1.22 是
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP"

state的意義
0 Phase 1, starting up
1 Primary member
2 Secondary member

然後發現 192.168.1.21 變成了 rs1:SECONDARY> 提示
意思各主機之間選舉完成,該主機已經轉型成 SECONDARY 角色

*** 到 192.168.1.22 主機上
初使化 replSet
rs.initiate()

確認
rs.status()
然後發現 192.168.1.22 變成了 rs1:PRIMARY> 提示


*** 到 192.168.1.23 主機上
初使化 replSet
rs.initiate()
注意:如果 /etc/mongod.conf 裡面的設定是 bindIp: 127.0.0.1 就會失敗


確認
rs.status()
然後發現 192.168.1.23 變成了 rs1:PRIMARY> 提示

確認本機DB 角色是否為 Master, 指令: 
rs.isMaster()

-----------------------------------------------
END
-----------------------------------------------

查看複制集狀態
rs.status()
rs.isMaster();
以rs.help() 顯示更多 rs指令


以db.help() 顯示更多 db指令

db.oplog.rs.find();

db.printReplicationInfo();

db.printSlaveReplicationInfo();

db.system.replset.find();

db.getMongo().setSlaveOk();

增加節點

rs.add("localhost:28013")
rs.status();

減少節點
rs.remove("localhost:28014")


Linux 網路校時

hwclock -r
ntpdate -u time.stdtime.gov.tw
hwclock -w
date



2016年5月25日 星期三

Centos7 安裝 MongoDB

由於 selinux 會影響 mongodb 的啟動,所以
vi /etc/selinux/config
SELINUX=disabled

然後重啟 OS

1. 加入 MongoDB Repository
vi /etc/yum.repos.d/mongodb.repo

參考 https://www.mongodb.com/download-center?jmp=nav#community

OS 是 64-Bit 的話

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc


2. 安裝 3.4.x:

yum install -y mongodb-org

(會自動安裝五個套件:
mongodb-org-3.4.x
mongodb-org-server
mongodb-org-shell
mongodb-org-tools
mongodb-org-mongos
)


3. 修改
vi /etc/mongod.conf
先將預設的 bind IP 127.0.0.1 修改為 0.0.0.0

vi /etc/security/limits.d/20-nproc.conf
尾巴加一行後存檔
mongod     soft    nproc     500000



4. 防火牆設定
systemctl stop firewalld
systemctl disable firewalld
或者是
firewall-cmd --permanent --zone=public --add-port=27017/tcp
firewall-cmd --reload
systemctl restart mongod


5. 啟動與查服務的狀態
systemctl enable mongod
systemctl start mongod
ps auxw | grep mongod
systemctl status mongod


如果無法執行,可以考慮兩個方向:
1. SELINUX=disabled
vi /etc/selinux/config
SELINUX=disabled

2. 如果 SELinux 是enforcing 模式,則
yum -y install policycoreutils-python
semanage port -a -t mongod_port_t -p tcp 27017

查 LOG
/var/log/mongodb/mongod.log


6. 最後參照官網教學 Disable Transparent Huge Pages   ( Link )
vi /etc/init.d/disable-transparent-hugepages

填入以下腳本檔內容
#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    re='^[0-1]+$'
    if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
    then
      # RHEL 7
      echo 0  > ${thp_path}/khugepaged/defrag
    else
      # RHEL 6
      echo 'no' > ${thp_path}/khugepaged/defrag
    fi

    unset re
    unset thp_path
    ;;
esac
設定可執行權限
chmod 755 /etc/init.d/disable-transparent-hugepages

根據 OS 的不同,參考以下指令:
DistributionCommand
Ubuntu and Debian
sudo update-rc.d disable-transparent-hugepages defaults
SUSE
sudo insserv /etc/init.d/disable-transparent-hugepages
Red Hat, CentOS, Amazon Linux, and derivatives
sudo chkconfig --add disable-transparent-hugepages
將作業系統重新開機,登入之後 啟動 mongo 確認是否還有警告提示


2016年5月24日 星期二

LINUX 設定固定IP

當只有一張網卡時,網路設定檔位於
/etc/sysconfig/netwotk-scripts/ifcfg-eth0

BOOTPROTO="dhcp"  //若為固定IP則為BOOTPROTO="none"

ONBOOT="yes"

IPADDR=192.168.1.168
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=168.95.1.1
DNS2=8.8.8.8

修改存檔後重新啟動網路設定
service network restart

/etc/init.d/network restart


2016年5月23日 星期一

安裝 ajenti

透過 Ajenti 使得我們在不同版本的  Linux 可以在系統管理方面尚取得較一致性的經驗
安裝步驟如下:

install (CentOS 7 / RHEL7)
rpm -Uvh http://mirror01.idc.hinet.net/EPEL/7/x86_64/e/epel-release-7-8.noarch.rpm

Add repository key:
wget http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm
rpm -i ajenti-repo-1.0-1.noarch.rpm

Install the package:
yum -y install ajenti

Start the service:
systemctl enable ajenti
systemctl restart ajenti

防火牆要打開 8000 port
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reload

預設登入網址 https://<ServerIP>:8000
預設帳號與密碼是 root/admin

如果發生 https 無法成功登入,可以修改/etc/ajenti/config.json
將 "ssl": {
        "enable": ture 改成 false

然後重啟服務
systemctl restart ajenti


2016年5月22日 星期日

2016年5月19日 星期四

CENTOS 安裝與設定 POP3 sever,Dovecot

yum -y install dovecot

1.設定監聽pop3服務
編輯 /etc/dovecot/dovecot.conf
protocols = all or protocols = pop3
設好後存檔離開

2.取消明碼傳輸
編輯 /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no

3.
編輯 /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Mail
重點是與postfix設定要一致才能找得到信件

4.啟用dovecot服務
service dovecot start  or  systemctl  start dovecot

5.測試是否能正確收信,
telnet localhost pop3
user 使用者名稱
pass 密碼
list (這是列出信件)
quit (離開)

CENTOS 安裝 Postfix Server

yum -y install postfix

vi /etc/postfix/main.cf

1.設定Hostname
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = 你的主機名稱

2.設定網域名稱(Domain Name)
#mydomain =domain.tld
mydomain = 你的網域名稱

3.設定Origin Name
myorigin = $mydomain

4.設定 postfix 的監聽介面
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, locatlhost
#inet_interfaces = localhost
inet_interfaces = all

5.修改Postfix的通訊協定
inet_protocols = ipv4 or inet_protocols = all

6.設定能收收信件的主機名稱
mydestination = $myhostname, localhost.$mydomain, localhost, mydomain

7.設定信任的用戶端
mynetworks = 127.0.0.0/8, 192.168.1.0/24, hash:/etc/postfix/access

8.規範可以 relay 的 MTA 主機位址
relay_domains = $mydestination

9.設定郵件別名的路徑
alias_maps = hash:/etc/aliases

10.設定指定郵件別名表資料庫路徑
alias_database = hash:/etc/aliases

11.設定完成後,請在終端機下輸入以下二行指令
postmap hash:/etc/postfix/access
postalias hash:/etc/aliases

12.重啟postfix就可以利用smtp的服務收發信件
service postfix restart  or  systemctl  restart  postfix

13.檢查SMTP服務是否開啟
netstat -tlunp | grep ':25'

搜尋此網誌