Skip to content

Commit 00d9254

Browse files
committed
Scripts to make rpm package of tcpdive.
1 parent 0c38ceb commit 00d9254

File tree

3 files changed

+234
-0
lines changed

3 files changed

+234
-0
lines changed

script/make_rpm.sh

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
3+
# Make a rpm package of tcpdive based on specific kernel version.
4+
5+
# Kernel Version
6+
KERNEL_VER="2.6.32-431.17.1.el6.x86_64"
7+
KERNEL_NAME=`echo $KERNEL_VER|sed 's/\.x86_64//'`
8+
9+
if [ ! -d "/lib/modules/$KERNEL_VER" ]; then
10+
echo "kernel-devel-$KERNEL_VER.rpm is not installed!"
11+
exit 1
12+
fi
13+
14+
# Tool Version
15+
TOOL_VER="1.0"
16+
TOOL_RELEASE="stable"
17+
DIR=`dirname $0`
18+
CMD_FILE="$DIR/tcpdive"
19+
SPEC_FILE="$DIR/tcpdive.spec"
20+
MODULE="tcpdive.ko"
21+
22+
# Revise cmd file
23+
sed -i "4s/.*/TOOL_VER=$TOOL_VER/" $CMD_FILE
24+
sed -i "5s/.*/TOOL_RELEASE=$TOOL_RELEASE/" $CMD_FILE
25+
sed -i "7s/.*/KERNEL=$KERNEL_VER/" $CMD_FILE
26+
27+
# Revise spec file
28+
sed -i "1s/.*/%define kversion $KERNEL_NAME/" $SPEC_FILE
29+
sed -i "4s/.*/Version: $TOOL_VER/" $SPEC_FILE
30+
sed -i "5s/.*/Release: $TOOL_RELEASE/" $SPEC_FILE
31+
32+
# Compile module
33+
# use "../tcpdive.sh -h" to see all options supported.
34+
$DIR/../tcpdive.sh -m -L -H > /dev/null
35+
if [[ $? -ne 0 || ! -f $MODULE ]]; then
36+
echo "Compile $MODULE failed!"
37+
exit 1
38+
fi
39+
40+
# Build rpm
41+
RPMROOT="/root/rpmbuild"
42+
TAR_NAME="tcpdive-$KERNEL_NAME-$TOOL_VER"
43+
44+
mkdir -p $TAR_NAME
45+
mv $MODULE $TAR_NAME
46+
cp $CMD_FILE $TAR_NAME
47+
tar -czf $TAR_NAME.tar.gz $TAR_NAME/
48+
rm -rf $TAR_NAME
49+
50+
mkdir -p $RPMROOT/SOURCES
51+
mv $TAR_NAME.tar.gz $RPMROOT/SOURCES
52+
53+
rpmbuild -bb $SPEC_FILE &> $RPMROOT/log
54+
if [ $? -eq 0 ]; then
55+
echo "Make rpm package ok!"
56+
mv $RPMROOT/RPMS/x86_64/${TAR_NAME}*.rpm .
57+
rm -f $RPMROOT/RPMS/x86_64/tcpdive*
58+
else
59+
echo "Make rpm package failed!"
60+
cat $RPMROOT/log
61+
fi
62+
63+
rm -f $MODULE
64+
rm -f $RPMROOT/log
65+
rm -rf $RPMROOT/SOURCES/${TAR_NAME}*
66+
rm -rf $RPMROOT/BUILD/${TAR_NAME}*
67+
68+

script/tcpdive

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#!/bin/bash
2+
3+
# Version
4+
TOOL_VER=1.0
5+
TOOL_RELEASE=stable
6+
7+
KERNEL=2.6.32-431.17.1.el6.x86_64
8+
KERNEL_NAME=`echo $KERNEL|sed 's/\.x86_64//'`
9+
10+
MODULE="/lib/modules/$KERNEL/kernel/net/ipv4/tcpdive.ko"
11+
RPM="tcpdive-$KERNEL_NAME-$TOOL_VER-$TOOL_RELEASE.x86_64.rpm"
12+
13+
# Log
14+
LOG_NAME="tcpdive.log" # log file name
15+
LOG_SIZE=500 # per log file's upper size(MB)
16+
LOG_NUM=20 # max number of log files
17+
18+
# Port filter
19+
PORTS="80" # server ports concerned, e.g. 80,8080
20+
21+
start() {
22+
staprun -D -S $LOG_SIZE,$LOG_NUM -o $LOG_NAME $MODULE \
23+
port_str=$PORTS > /dev/null
24+
}
25+
26+
stop() {
27+
PID=`ps aux|grep stap|grep tcpdive|grep -v grep|awk '{print $2}'`
28+
kill -s SIGINT $PID
29+
}
30+
31+
# 0 - running, 1 - stopped
32+
status() {
33+
local ret=0
34+
ps aux|grep stap|grep tcpdive|grep -v grep &> /dev/null || ret=1
35+
return $ret
36+
}
37+
38+
check() {
39+
# Check Permission
40+
if [ $UID -ne 0 ]; then
41+
echo "please run as root."
42+
exit 1
43+
fi
44+
45+
# Check installation
46+
RPM_NAME=`echo $RPM|sed 's/\.rpm//'`
47+
rpm -qa|grep $RPM_NAME &> /dev/null
48+
if [ $? -ne 0 ]; then
49+
echo "$RPM is not installed."
50+
exit 1
51+
fi
52+
53+
if [ ! -f $MODULE ]; then
54+
MODULE="/lib/modules/$KERNEL_NAME/kernel/net/ipv4/tcpdive.ko"
55+
fi
56+
57+
if [ ! -f $MODULE ]; then
58+
echo "$MODULE is missing!"
59+
echo "please reinstall $RPM."
60+
exit 1
61+
fi
62+
63+
# Check kernel version
64+
KVER=`uname -r`
65+
if [ "$KVER" != "$KERNEL" ]; then
66+
echo "Current kernel version: $KVER"
67+
echo "Installed tcpdive is for kernel version: $KERNEL"
68+
echo "Please install the right version of tcpdive!"
69+
exit 1
70+
fi
71+
}
72+
73+
case $1 in
74+
start)
75+
check
76+
status
77+
ret=$?
78+
if [ $ret -eq 0 ]; then
79+
echo "tcpdive is already running..."
80+
else
81+
# Check corner case
82+
lsmod|grep tcpdive|grep -v grep &> /dev/null
83+
if [ $? -eq 0 ]; then
84+
echo "tcpdive.ko is already insmod."
85+
echo "Do some cleaning before reinstall."
86+
exit 1
87+
fi
88+
89+
start
90+
sleep 1
91+
status
92+
if [ $? -eq 0 ]; then
93+
echo "tcpdive is started."
94+
else
95+
echo "tcpdive start failed!"
96+
fi
97+
fi
98+
;;
99+
stop)
100+
status
101+
ret=$?
102+
if [ $ret -eq 0 ]; then
103+
stop
104+
sleep 1
105+
echo "tcpdive is stopped."
106+
else
107+
echo "tcpdive is already stopped."
108+
fi
109+
;;
110+
status)
111+
status
112+
ret=$?
113+
if [ $ret -eq 0 ]; then
114+
echo "tcpdive is running..."
115+
else
116+
echo "tcpdive is stopped."
117+
fi
118+
;;
119+
*)
120+
echo "Usage: $0 {start|stop|status}"
121+
exit 1;;
122+
esac
123+
124+

script/tcpdive.spec

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
%define kversion 2.6.32-431.17.1.el6
2+
3+
Name: tcpdive-%{kversion}
4+
Version: 1.0
5+
Release: stable
6+
Summary: A TCP performance profiling tool
7+
Group: System Environment/Kernel
8+
License: GPL
9+
Source0: %{name}-%{version}.tar.gz
10+
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
11+
12+
Requires: kernel = %{kversion} systemtap-runtime >= 2.3
13+
14+
%description
15+
A TCP performance profiling tool.
16+
17+
%prep
18+
19+
%setup -q
20+
21+
%build
22+
23+
%install
24+
mkdir -p %{buildroot}/usr/bin
25+
mkdir -p %{buildroot}/lib/modules/%{kversion}/kernel/net/ipv4
26+
install -m 744 tcpdive %{buildroot}/usr/bin
27+
install -m 744 tcpdive.ko %{buildroot}/lib/modules/%{kversion}/kernel/net/ipv4
28+
29+
%clean
30+
rm -rf %{buildroot}
31+
32+
%files
33+
/usr/bin/tcpdive
34+
/lib/modules/%{kversion}/kernel/net/ipv4/tcpdive.ko
35+
%defattr(-,root,root,-)
36+
%doc
37+
38+
%changelog
39+
* Thu Dec 31 2015 zhangsk <[email protected]>
40+
- 1.0 First release
41+
42+

0 commit comments

Comments
 (0)