Home » 산딸기 가지고 놀기 » 라즈베리파이 활용 강좌 : 엔진엑스에서 라즈컨트롤 사용하기

Raspbian만 사용하다가 Archlinux, nginx를 설치해 보았습니다.

설치하는 김에 Raspcontrol도 사용해 보았습니다.

설치는 다음을 참고하였습니다.
Raspberry Pi Mornitoring and Control by WEB:Raspcontrol
Bioshox/Raspcontrol GitHub

처음 로그인 해서 Detail 화면을 보시면 다음과 같이 나옵니다.

original_raspcontrol_detail

 

박스가 된 부분이 의심스럽습니다.

하나씩 확인해 보겠습니다.

 

1. Swap

# vi /srv/http/lib/memory.php

public static function swap() {

$result = array();

exec(‘free -mo’, $out);

swap() swap 정보를 계산하는 함수입니다.

‘free -mo’ command를 실행하여 결과값을 사용했습니다.

그럼 프롬프트상에서 실행해보겠습니다.

# free -mo

Mem: 461 68 392 0 7 35

Swap: 0 0 0

Swap이 0으로 나옵니다. 아, 그러고보니 Arch 설치때Swap을 설정한 기억이 없군요.

Swap을 설정해 보겠습니다.

# cd /root
# dd if=/dev/zero of=/root/swap bs=1M count 512
# chmod 600 /root/swap
# mkswap /root/swap
# swapon /root/swap

다시 프롬프트상에서 Swap을 확인해보겠습니다.

# free -mo

Mem: 461 68 392 0 7 35

Swap: 511 0 511

Swap은 정상 출력되고 있습니다.

 

2. CPU Clock Speed , Thermal

# vi /srv/http/lib/cpu.php


public static function cpu() {
$result = array();
$getLoad = sys_getloadavg();
$cpuCurFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq”) / 1000) . “MHz”;
$cpuMinFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq”) / 1000) . “MHz”;
$cpuMaxFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq”) / 1000) . “MHz”;
$cpuFreqGovernor = file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor”);

cpu 정보는 “/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq” file을 읽고 그 값을 사용했습니다.

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

700000

file에 700.000 이 들어있습니다.

그런데 현재는 웹화면에 값이 나타나지 않습니다.

file_get_contents() 함수에 대해 검색해본 결과, 보안에 취약하여 막아놓았다는 답변입니다.

테스트해보니 web root directory (“/srv/http”)의 하위디렉토리의 file에는 접근이 가능하나 상위로는 접근이 불가했습니다.

이에 대응해서 curl 언어 사용, nginx.config/php.ini file 수정 등 구글링으로 몇가지 시도해 보았으나,

어설픈 실력탓에 성공하지 못했습니다. 이부분에 대해서 조언 부탁드립니다.

그래서 소스를 수정하기로 했습니다.


/* before
$cpuCurFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq”) / 1000) . “MHz”;
$cpuMinFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq”) / 1000) . “MHz”;
$cpuMaxFreq = round(file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq”) / 1000) . “MHz”;
$cpuFreqGovernor = file_get_contents(“/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor”);
*/
/* after */
$cpuCurFreq = shell_exec(“cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq”)/1000 . “MHz”;
$cpuMinFreq = shell_exec(“cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq”)/1000 . “MHz”;
$cpuMaxFreq = shell_exec(“cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq”)/1000 . “MHz”;
$cpuFreqGovernor = shell_exec(“cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor”);

cpu.php를 열었으니 아래의 온도부분도 수정해버리겠습니다.


public static function heat() {
$result = array();
$fh = fopen(“/sys/class/thermal/thermal_zone0/temp”, ‘r’);
$currenttemp = fgets($fh);
fclose($fh);

fopen() 함수도 file_get_contents() 함수처럼 막혀있습니다.


/* before
$fh = fopen(“/sys/class/thermal/thermal_zone0/temp”, ‘r’);
$currenttemp = fgets($fh);
fclose($fh);
*/
/* after */
$currenttemp = shell_exec(“cat /sys/class/thermal/thermal_zone0/temp”);

CPU 구동 클럭과 온도가 정상적으로 표시되었습니다.

 

3. Network

# vi network.php


$data = shell_exec(“/sbin/ifconfig eth0 | grep RX\ bytes”);
$data = str_ireplace(“RX bytes:”, “”, $data);
$data = str_ireplace(“TX bytes:”, “”, $data);
$data = trim($data);
$data = explode(” “, $data);
$rxRaw = $data[0] / 1024 / 1024;
$txRaw = $data[4] / 1024 / 1024;
$rx = round($rxRaw, 2);
$tx = round($txRaw, 2);

다음을 실행해 보았습니다.

# /sbin/ifconfig eth0 | grep RX\ bytes
#

아무것도 나오지 않습니다.

[code]
# ifconfig eth0
eth0: flags=4163 mtu 1500
inet 192.168.0.32 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::ba27:ebff:fea4:2fc prefixlen 64 scopeid 0x20 ether b8:27:eb:a4:02:fc txqueuelen 1000 (Ethernet)
RX packets 2260 bytes 185994 (181.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2447 bytes 341805 (333.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[/code]

이유는 ifconfig 명령어에 “RX bytes”를 포함하는 라인이 없어서 입니다.

Raspconfig가 Raspbian을 기본으로 프로그램되었는데 ifconfig 표현 방식이 Raspbian과 Archlinux가 차이가 있습니다.

Raspbian의 ifconfig 마지막줄에 RX bytes 10000 과 같은 라인이 존재합니다.

그러면 Archlinux에 맞도록 수정해보겠습니다.

[code]…
/* before
$data = shell_exec(“/sbin/ifconfig eth0 | grep RX\ bytes”);
$data = str_ireplace(“RX bytes:”, “”, $data);
$data = str_ireplace(“TX bytes:”, “”, $data);
$data = trim($data);
$data = explode(” “, $data);
$rxRaw = $data[0] / 1024 / 1024;
$txRaw = $data[4] / 1024 / 1024;
$rx = round($rxRaw, 2);
$tx = round($txRaw, 2);
*/
/* after */
$data = shell_exec(“/sbin/ifconfig eth0 | grep ‘RX packets'”);
$data = str_ireplace(“RX packets:”, “”, $data);
$data = trim($data);
$data = explode(” “, $data);
$rxRaw = $data[5] / 1024 / 1024;

$data = shell_exec(“/sbin/ifconfig eth0 | grep ‘TX packets'”);
$data = str_ireplace(“TX packets:”, “”, $data);
$data = trim($data);
$data = explode(” “, $data);
$txRaw = $data[5] / 1024 / 1024;

$rx = round($rxRaw, 2);
$tx = round($txRaw, 2);
…[/code]

 

4. Users

SSH 로 확인 중인데 0 Users 로 나옵니다.

[code]# vi users.php[/code]

[code]…
public static function connected() {
$result = array();
$dataRaw = shell_exec(“who –ips”);
$dataRawDNS = shell_exec(“who –lookup”);
…[/code]

프롬프트에서 실행해 보았습니다.

[code] # who –ips
who: unrecognized option ‘–ips’
Try ‘who –help’ for more information.[/code]

‘–ips’ option이 잘못되었습니다.

그래서 이부분을 사용하지 않고 ‘–lookup’ option만 사용했습니다.

[code]…

/* Not Used
$dataRaw = shell_exec(“who –ips”);
*/
$dataRawDNS = shell_exec(“who –lookup”);
foreach (explode (“\n”, $dataRawDNS) as $line) {
$line = preg_replace(“/ +/”, ” “, $line);
if (strlen($line)>0) {
$line = explode(” “, $line);
$temp[] = $line[5];
}
}

$i = 0;
/* before
foreach (explode (“\n”, $dataRaw) as $line) {
*/
/* after */
foreach (explode (“\n”, $dataRawDNS) as $line) {
$line = preg_replace(“/ +/”, ” “, $line);
if (strlen($line)>0) {
$line = explode(” “, $line);
$result[] = array(
‘user’ = $line[0],
‘ip’ = $line[5],
‘dns’ = $temp[$i],
‘date’ = $line[2] .’ ‘. $line[3],
‘hour’ = $line[4] );
}
$i++;
}
return $result;
}
}

[/code]

modified_raspcontrol_detail

 

[참고사이트]

ohttps://github.com/Bioshox/Raspcontrol

 

One Reply to “라즈베리파이 활용 강좌 : 엔진엑스에서 라즈컨트롤 사용하기”

  1. maillot de foot 댓글:

    Greetings! Really beneficial guidance on this informative article!

Comments are closed.

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700