Redis 3.0.5 Build
4 Dec 2015
Create the redis user and group.
Note we do this as root:
$ su - # addgroup --gid 1002 redis # adduser --home /home/redis --uid 1002 --gid 1002 --disabled-password redis
Get the Redis source code and build it. This is very straightforward.
Note, however, that we are going to install in /usr/local/redis-3.0.5
,
to cordon this off from the rest of our system.
# cd /usr/local/src # wget http://download.redis.io/releases/redis-3.0.5.tar.gz # tar -xzvf redis-3.0.5.tar.gz # cd redis-3.0.5/ # make # make test # make PREFIX=/usr/local/redis-3.0.5 install
This only installs the Redis binaries. It would be nice make's install target
also gave us a configuration file, etc, etc, but there is a utility script in the source
that we can use. Please note that I use all the options to put everything in a subdirectory
of /usr/local/redis-3.0.5
.
# cd utils # ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] /usr/local/redis-3.0.5/conf/6379.conf Please select the redis log file name [/var/log/redis_6379.log] /usr/local/redis-3.0.5/logs/6379.log Please select the data directory for this instance [/var/lib/redis/6379] /usr/local/redis-3.0.5/data/6379 Please select the redis executable path [] /usr/local/redis-3.0.5/bin/redis-server Selected config: Port : 6379 Config file : /usr/local/redis-3.0.5/conf/6379.conf Log file : /usr/local/redis-3.0.5/logs/6379.log Data dir : /usr/local/redis-3.0.5/data/6379 Executable : /usr/local/redis-3.0.5/bin/redis-server Cli Executable : /usr/local/redis-3.0.5/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. <<enter>> Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Success! Starting Redis server... Installation successful!
Unfortunately, ./install_server.sh
has set us up with an old-school SysV init script,
so we must go dismantle it.
# /etc/init.d/redis_6379 stop Stopping ... Redis stopped # update-rc.d -n redis_6379 remove insserv: remove service /etc/init.d/../rc0.d/K01redis_6379 insserv: remove service /etc/init.d/../rc1.d/K01redis_6379 insserv: remove service /etc/init.d/../rc2.d/S02redis_6379 insserv: remove service /etc/init.d/../rc3.d/S02redis_6379 insserv: remove service /etc/init.d/../rc4.d/S02redis_6379 insserv: remove service /etc/init.d/../rc5.d/S02redis_6379 insserv: remove service /etc/init.d/../rc6.d/K01redis_6379 insserv: dryrun, not creating .depend.boot, .depend.start, and .depend.stop # rm /etc/init.d/redis_6379
Also, sadly, the default conf file wants to put the pid file in /var/run
,
so in the interests of keeping everything under the /usr/local/redis-3.0.5
directory, let's fix that now.
# mkdir -p /usr/local/redis-3.0.5/var # vi /usr/local/redis-3.0.5/conf/6379.conf
pidfile /var/run/redis_6379.pid ==> pidfile /usr/local/redis-3.0.5/var/redis_6379.pid
Let's chown the entire Redis directory so that we can run Redis as user redis.
# chown -R redis:redis /usr/local/redis-3.0.5/
Now let's create a systemd file for Redis.
# cd /etc/systemd/system # vi redis-6379.service
[Unit] Description=Redis 3.0.5 # This unit can only run after the network is up and running # (that is, the network target has run) After=network.target [Service] # Redis is a traditional UNIX daemon that forks a child, # and the initial process exits Type=forking # Wait 120 seconds on startup and shutdown to consider the process # correctly started up or shut down. TimeoutSec=120 # The UNIX user and group to execute Redis as User=redis Group=redis # Set the REDISROOT environmental variable for Redis Environment=REDISROOT=/usr/local/redis-3.0.5 # If StandardOutput= or StandardError= are set to syslog, journal or kmsg, # prefix log lines with "postgres" SyslogIdentifier=postgres # Let systemd know where Redis keeps its pid file PIDFile=/usr/local/redis-3.0.5/var/redis_6379.pid # Command used to start Redis ExecStart= /usr/local/redis-3.0.5/bin/redis-server ${REDISROOT}/conf/6379.conf # Command used to stop Redis ExecStop= /bin/kill $(cat /usr/local/redis-3.0.5/var/redis_6379.pid) # Use the lowest allowable setting for the OOM killer; this should # actually disable the OOM killer for Redis OOMScoreAdjust=-1000 [Install] # This unit is part of target multi-user WantedBy=multi-user.target
Now let's test:
# systemctl daemon-reload # systemctl start redis-6379 # systemctl status redis-6379 # systemctl stop redis-6379 # systemctl status redis-6379
Everything worked as expected.