원하는 경로에 redis를 설치합니다.
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
make 명령어를 치니, make가 설치가 안되었다고 뜹니다.
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable# make
Command 'make' not found, but can be installed with:
apt install make
apt install make-guile
apt install make 명령어를 사용하여 설치하게 됩니다.
make[3]: Entering directory '/usr/local/redis/redis-stable/deps/hiredis'
gcc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
make[3]: gcc: Command not found
Makefile:156: recipe for target 'net.o' failed
make[3]: *** [net.o] Error 127
make[3]: Leaving directory '/usr/local/redis/redis-stable/deps/hiredis'
Makefile:45: recipe for target 'hiredis' failed
make[2]: *** [hiredis] Error 2
make[2]: Leaving directory '/usr/local/redis/redis-stable/deps'
Makefile:190: recipe for target 'persist-settings' failed
make[1]: [persist-settings] Error 2 (ignored)
CC adlist.o
/bin/sh: 1: cc: not found
Makefile:248: recipe for target 'adlist.o' failed
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory '/usr/local/redis/redis-stable/src'
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 2
make[3]: gcc: Command not found 라는 에러가 뜹니다. gcc를 설치해야합니다.
apt install gcc
gcc 를 설치합니다. gcc 설치 중,
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_4.15.0-39.42_amd64.deb 404 Not Found [IP: 91.189.88.31 80]
이런 에러가 발생합니다.
apt-get update
apt-get 을 update 합니다.
apt install gcc
업데이트 후 gcc를 설치하면 404 Not Found 가 발생하지 않고 정상적으로 잘 설치가 됩니다.
gcc 설치 후, 다시 make를 치면 다음과 같은 에러가 납니다.
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable# make
cd src && make all
make[1]: Entering directory '/usr/local/redis/redis-stable/src'
CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory
#include <jemalloc/jemalloc.h>
^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:248: recipe for target 'adlist.o' failed
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory '/usr/local/redis/redis-stable/src'
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 2
최초 설치시 gcc가 없어 실패하면서, 무언가 제대로 설치가 안된거 같습니다.
단순하게 distclean 후 다시 설치하도록 하겠습니다.
make distclean
sudo make install
그럼 이제 정상적으로 redis 가 compile 되기 시작합니다.
설치가 완료되면, src 폴더로 이동합니다.
cd src
-rwxr-xr-x 1 root root 5216008 Jun 19 11:14 redis-cli
-rwxr-xr-x 1 root root 8770008 Jun 19 11:14 redis-server
redis-server 실행을 합니다. 근데 실행이 안됩니다. ㅠ-ㅜ
deps 폴더에 가서, 별도의 명령어를 치는 방법.
cd deps
make hiredis jemalloc linenoise lua geohash-int
deps 로 가서 jemalloc 가 기타 등등을 실행시킵니다.
그리고 다시 make 로 설치를 진행합니다.
sudo make install
그리고 다시 ./src 폴더로 가면, redis-server를 실행시킬 수 있습니다.
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# redis-server
3963:C 19 Jun 2019 11:57:22.660 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3963:C 19 Jun 2019 11:57:22.661 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=3963, just started
3963:C 19 Jun 2019 11:57:22.662 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3963:M 19 Jun 2019 11:57:22.663 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 3963
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
3963:M 19 Jun 2019 11:57:22.701 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3963:M 19 Jun 2019 11:57:22.704 # Server initialized
3963:M 19 Jun 2019 11:57:22.706 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3963:M 19 Jun 2019 11:57:22.713 * Ready to accept connections
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# nohup ./redis-server &
[1] 3982
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# nohup: ignoring input and appending output to 'nohup.out'
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src#
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src#
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# ps -ef|grep redis
root 3982 16 0 12:00 tty1 00:00:00 ./redis-server
root 3987 16 0 12:00 tty1 00:00:00 grep --color=auto redis
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# redis-cli
127.0.0.1:6379> set key 'melong'
OK
127.0.0.1:6379> get key
"melong"
127.0.0.1:6379>
nohup 을 이용해, redis-server 를 실행시킵니다.
redis-cli 를 이용해 간단한 테스트를 진행해봅니다.
정상적으로 key와 value 가 찍히는 것을 확인할 수 있었습니다.
이제 레디스를 종료하기 위해, 레디스를 종료했습니다.
^C4004:signal-handler (1560924252) Received SIGINT scheduling shutdown...
4004:M 19 Jun 2019 15:04:12.255 # User requested shutdown...
4004:M 19 Jun 2019 15:04:12.256 * Saving the final RDB snapshot before exiting.
4004:M 19 Jun 2019 15:04:12.263 * DB saved on disk
4004:M 19 Jun 2019 15:04:12.263 # Redis is now ready to exit, bye bye...
라는 메시지가 뜨며 종료가 되었으나, client 에서 여전히 서버에 접속이 되는 것을 확인했습니다.
root@DESKTOP-RNJILIO:/usr/local/redis/redis-stable/src# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
현재 열려있는 port 를 확인해봤으나 검색이 되지 않습니다…..
혹시… 윈도우의 cmd 창을 띄운 후에 ,
C:\Users\bymin>netstat -a -o | find ":6379"
를 실행해봤습니다. 맙소사 윈도우 10 프로세스에 떠있습니다.
C:\WINDOWS\system32>taskkill /f /pid 4176
성공: 프로세스(PID 4176)가 종료되었습니다.
관리자 권한으로 프로세스를 강제로 킬했습니다.
이제 서버가 강제로 중지되었으며 해당 redis-server에 접속이 안되는 것을 확인했습니다.
윈도우 10에서 완벽하게 우분투를 설치해서 실제로 우분투 환경의 테스트를 하기는 아직 힘든거 같네요. 관련 프로세스를 리눅스에 온전히 띄우는 방법을 찾으면 다시 정리해서 올리도록 하겠습니다.