Skip to content

Commit 56c3d07

Browse files
authored
Merge pull request #67 from pj8/memcached
Support memcached
2 parents e360e3b + fe3bac8 commit 56c3d07

17 files changed

+617
-12
lines changed

.github/workflows/test.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ jobs:
1616
postgresql-12.4.sh,
1717
postgresql-13.2.sh,
1818
redis-6.2.14.sh,
19-
redis-7.2.5.sh
19+
redis-7.2.5.sh,
20+
memcached-1.6.31.sh
2021
]
2122
steps:
2223
- uses: actions/checkout@v4

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
/redis/redis-*.tar.gz
77
/mongodb/versions
88
/mongodb/mongodb-*.tar.gz
9+
/memcached/versions
10+
/memcached/memcached-*.tar.gz
11+
/memcached/libevent-*.tar.gz
912
.DS_Store

README.md

+30-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ cd dbdb
2222

2323
## MySQL
2424

25-
### Manage MySQL Server on localhost
25+
### Commands for MySQL Server
2626

2727
```
2828
./mysql/{create|start|stop|restart|port|status|connect|delete}.sh {name} {mysqlVersion} {port}
@@ -61,7 +61,7 @@ cd dbdb
6161

6262
## PostgreSQL
6363

64-
### Manage PostgreSQL Server on localhost
64+
### Commands for PostgreSQL Server
6565

6666
```
6767
./postgresql/{create|start|stop|restart|port|status|connect|delete}.sh {name} {postgresqlVersion} {port}
@@ -89,7 +89,7 @@ cd dbdb
8989

9090
## Redis
9191

92-
### Manage Redis Server on localhost
92+
### Commands for Redis Server
9393

9494
```
9595
./redis/{create|start|stop|restart|port|status|connect|delete}.sh {name} {redisVersion} {port}
@@ -118,7 +118,7 @@ cd dbdb
118118

119119
## MongoDB
120120

121-
### Manage MongoDB Server on localhost
121+
### Commands for MongoDB Server
122122

123123
```
124124
./mongodb/{create|start|stop|restart|port|status|connect|delete}.sh {name} {mongodbVersion} {port}
@@ -141,6 +141,32 @@ cd dbdb
141141

142142
</div></details>
143143

144+
<details><summary>Memcached</summary><div>
145+
146+
## Memcached
147+
148+
### Commands for Memcached Server
149+
150+
```
151+
./memcached/{create|start|stop|restart|port|status|connect|delete}.sh {name} {memcachedVersion} {port}
152+
153+
# e.g.
154+
./memcached/create.sh memcached1 1.6.31 11211
155+
./memcached/start.sh memcached1
156+
./memcached/stop.sh memcached1
157+
./memcached/restart.sh memcached1
158+
./memcached/port.sh memcached1
159+
./memcached/status.sh memcached1
160+
./memcached/connect.sh memcached1
161+
./memcached/delete.sh memcached1
162+
```
163+
164+
### Supported Memcached Versions
165+
166+
- 1.6.31
167+
168+
</div></details>
169+
144170
## Tips
145171

146172
### Create with random port.

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v2.0.3
1+
v2.1.0

dbdb.sh

+8-6
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ installDir=$(getInstallDir)
4343

4444
normalOutputs=""
4545
jsonOutputs=""
46-
dbTypes=(mongodb mysql postgresql redis)
46+
dbTypes=(mongodb mysql postgresql redis memcached)
4747
for dbType in "${dbTypes[@]}"; do
4848
for dbVersion in $(ls "$installDir/$dbType/versions" 2>/dev/null); do
4949
if [ -d "$installDir/$dbType/versions/$dbVersion" ]; then
@@ -85,13 +85,15 @@ for dbType in "${dbTypes[@]}"; do
8585

8686
# confName
8787
if [ "$dbType" = "mongodb" ];then
88-
confName=mongod.conf
88+
confName="$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName/mongod.conf"
8989
elif [ "$dbType" = "mysql" ];then
90-
confName=my.cnf
90+
confName="$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName/my.cnf"
9191
elif [ "$dbType" = "postgresql" ];then
92-
confName=postgresql.conf
92+
confName="$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName/postgresql.conf"
9393
elif [ "$dbType" = "redis" ];then
94-
confName=redis.conf
94+
confName="$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName/redis.conf"
95+
elif [ "$dbType" = "memcached" ];then
96+
confName=""
9597
fi
9698

9799
# jsonOutputs
@@ -105,7 +107,7 @@ for dbType in "${dbTypes[@]}"; do
105107
\"commandPath\": \"$currentDir/$dbType/\",
106108
\"availableCommands\": $availableCommands,
107109
\"dataDir\": \"$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName\",
108-
\"confPath\": \"$installDir/$dbType/versions/$dbVersion/datadir/$dbServerName/$confName\"
110+
\"confPath\": \"$confName\"
109111
},"
110112
fi
111113
fi

lib/functions.sh

+2
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ getType() {
186186
echo "postgresql"
187187
elif [[ "$(getCurrentDir)" == *"/dbdb/redis"* ]]; then
188188
echo "redis"
189+
elif [[ "$(getCurrentDir)" == *"/dbdb/memcached"* ]]; then
190+
echo "memcached"
189191
else
190192
echo "unknown database type" 1>&2
191193
exit 1

memcached/connect.sh

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash
2+
set -eu
3+
4+
currentDir="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
5+
cd $currentDir
6+
. functions.sh
7+
8+
optName=$1
9+
10+
exitIfNotExistVersion "$optName"
11+
optVersion=$(getVersionByName "$optName")
12+
13+
exitIfNotExistPortFile "$optName" "$optVersion"
14+
optPort=$(getPortByName "$optName" "$optVersion")
15+
16+
installDir=$(getInstallDir $(getType))
17+
dir=$installDir/versions/$optVersion
18+
19+
exitIfNotExistDir $dir/datadir/$optName
20+
exitIfNotRunningPort $optPort
21+
22+
echo "You can connect to the server by executing the following command."
23+
echo "telnet 127.0.0.1 $optPort"

memcached/create-start.sh

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
3+
# Get format option
4+
format=""
5+
while getopts ":f:" opt; do
6+
case ${opt} in
7+
f)
8+
format="$OPTARG"
9+
;;
10+
\?)
11+
echo "Invalid option: -$OPTARG" 1>&2
12+
exit 1
13+
;;
14+
:)
15+
echo "Option -$OPTARG requires an argument." 1>&2
16+
exit 1
17+
;;
18+
esac
19+
done
20+
shift $((OPTIND - 1))
21+
22+
currentDir="$(
23+
cd "$(dirname "$0")" >/dev/null 2>&1
24+
pwd -P
25+
)"
26+
cd $currentDir
27+
28+
if [ $# -eq 0 ]; then
29+
cat <<_EOT_ >&2
30+
usage : $currentDir/create-start.sh {Name} {MemcachedVersion} {Port}
31+
e.g. : $currentDir/create-start.sh memcached16-foo 1.6.31 11211
32+
e.g. : $currentDir/create-start.sh memcached16-bar 1.6.31 11212
33+
e.g. : $currentDir/create-start.sh memcached16-baz 1.6.31 random
34+
_EOT_
35+
exit 1
36+
fi
37+
38+
./create.sh -f "$format" $1 $2 $3 > /dev/null
39+
set -eu
40+
./start.sh -f "$format" $1

memcached/create.sh

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/bin/bash
2+
set -eu
3+
4+
# Get format option
5+
format=""
6+
while getopts ":f:" opt; do
7+
case ${opt} in
8+
f)
9+
format="$OPTARG"
10+
;;
11+
\?)
12+
echo "Invalid option: -$OPTARG" 1>&2
13+
exit 1
14+
;;
15+
:)
16+
echo "Option -$OPTARG requires an argument." 1>&2
17+
exit 1
18+
;;
19+
esac
20+
done
21+
shift $((OPTIND - 1))
22+
23+
currentDir="$(
24+
cd "$(dirname "$0")" >/dev/null 2>&1
25+
pwd -P
26+
)"
27+
cd $currentDir
28+
29+
if [ $# -eq 0 ]; then
30+
cat <<_EOT_ >&2
31+
usage : $currentDir/create.sh {Name} {MemcachedVersion} {Port}
32+
e.g. : $currentDir/create.sh memcached16-foo 1.6.31 11211
33+
e.g. : $currentDir/create.sh memcached16-bar 1.6.31 11212
34+
e.g. : $currentDir/create.sh memcached16-baz 1.6.31 random
35+
_EOT_
36+
exit 1
37+
fi
38+
39+
. functions.sh
40+
41+
os=$(getOS)
42+
optName=$1
43+
optVersion=$2
44+
optPort=$(getOptPort $3)
45+
optFileName=memcached-${optVersion}-${os}
46+
installDir=$(getInstallDir $(getType))
47+
dir=$installDir/versions/$optVersion
48+
49+
mkdir -p "$dir"
50+
cd $dir
51+
52+
exitIfDuplicatedName $optName
53+
exitIfExistDir $dir/datadir/$optName
54+
exitIfRunningPort $optPort
55+
56+
# libevent
57+
if [ ! -e $dir/share/lib ]; then
58+
cd $dir
59+
getUrlFileAs https://dbdb.shueisha-artsdigital.co.jp/memcached/libevent-2.1.12-stable.tar.gz libevent-2.1.12-stable.tar.gz
60+
echo "Installing libevent..." 1>&2
61+
tar zxf libevent-2.1.12-stable.tar.gz
62+
cd $dir/libevent-2.1.12-stable
63+
./configure --prefix=$(pwd)/../share > /dev/null 2>&1
64+
make > /dev/null 2>&1
65+
make install > /dev/null 2>&1
66+
cd $dir
67+
fi
68+
69+
# memcached
70+
getUrlFileAs https://dbdb.shueisha-artsdigital.co.jp/memcached/$optFileName.tar.gz $optFileName.tar.gz
71+
mkdir -p $dir/datadir/$optName
72+
extractFile $dir $optFileName
73+
if [ ! -e $dir/basedir/bin/memcached ]; then
74+
echo "Installing Memcached..." 1>&2
75+
cd $dir/basedir
76+
./configure --prefix=$(pwd) --with-libevent=$(pwd)/../share > /dev/null 2>&1
77+
make > /dev/null 2>&1
78+
make install > /dev/null 2>&1
79+
fi
80+
81+
echo $optPort > $dir/datadir/$optName/memcached.port.init
82+
83+
commands=$(getCommands $optName $optVersion $optPort $format)
84+
85+
normalOutputs=""
86+
normalOutputs="${normalOutputs}Memcached Successfully created. $optName $optVersion $optPort\n"
87+
normalOutputs="${normalOutputs}$commands\n"
88+
89+
jsonOutputs=""
90+
jsonOutputs="$jsonOutputs{
91+
\"message\": \"Memcached Successfully created.\",
92+
\"name\": \"$optName\",
93+
\"type\": \"memcached\",
94+
\"version\": \"$optVersion\",
95+
\"port\": \"$optPort\",
96+
\"dataDir\": \"$dir/datadir/$optName\",
97+
\"confPath\": \"\"
98+
}"
99+
100+
# Output
101+
if [ "$format" = "json" ]; then
102+
echo -e "${jsonOutputs}"
103+
else
104+
echo -e "${normalOutputs}"
105+
fi

memcached/delete.sh

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/bin/bash
2+
3+
# Get format option
4+
format=""
5+
while getopts ":f:" opt; do
6+
case ${opt} in
7+
f)
8+
format="$OPTARG"
9+
;;
10+
\?)
11+
echo "Invalid option: -$OPTARG" 1>&2
12+
exit 1
13+
;;
14+
:)
15+
echo "Option -$OPTARG requires an argument." 1>&2
16+
exit 1
17+
;;
18+
esac
19+
done
20+
shift $((OPTIND - 1))
21+
22+
currentDir="$(
23+
cd "$(dirname "$0")" >/dev/null 2>&1
24+
pwd -P
25+
)"
26+
cd $currentDir
27+
. functions.sh
28+
29+
optName=$1
30+
31+
exitIfNotExistVersion "$optName"
32+
optVersion=$(getVersionByName "$optName")
33+
34+
exitIfNotExistPortFile "$optName" "$optVersion"
35+
optPort=$(getPortByName "$optName" "$optVersion")
36+
37+
installDir=$(getInstallDir $(getType))
38+
dir=$installDir/versions/$optVersion
39+
40+
./stop.sh -f "$format" $optName $optVersion $optPort > /dev/null
41+
42+
set -eu
43+
exitIfNotExistDir $dir/datadir/$optName
44+
exitIfRunningPort $optPort
45+
[ -d "$dir/datadir/$optName" ] && rm -fr $dir/datadir/$optName
46+
47+
normalOutputs=""
48+
normalOutputs="${normalOutputs}Memcached Successfully deleted. $optName $optVersion $optPort"
49+
50+
jsonOutputs=""
51+
jsonOutputs="$jsonOutputs{
52+
\"message\": \"Memcached Successfully deleted.\",
53+
\"name\": \"$optName\",
54+
\"type\": \"memcached\",
55+
\"version\": \"$optVersion\",
56+
\"port\": \"$optPort\",
57+
\"dataDir\": \"$dir/datadir/$optName\",
58+
\"confPath\": \"\"
59+
}"
60+
61+
# Output
62+
if [ "$format" = "json" ]; then
63+
echo -e "${jsonOutputs}"
64+
else
65+
echo -e "${normalOutputs}"
66+
fi

memcached/functions.sh

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../lib/functions.sh

0 commit comments

Comments
 (0)