Diffy a commits.log strike 2

Bartosz Świątek shadzik w gmail.com
Pon, 21 Kwi 2008, 11:35:49 CEST


Witam,

niedawno mielismy problem z wylaczonymi diffami w commits.log przez
glena, przez co security.pld-linux.org nie dzialalo.
Powodem wylaczenia tych diffow bylo to ze plik rosnie dosc szybko i na
dzien dzisiejszy ma prawie 4GB.
Obecnie diffy zostaly znowu wlaczone, ale mialbym rozwiazanie ktore
pozwoliloby jak mniamam wylaczyc diffowanie, a mimo to uchowac
funkcjonalnosc security.pld.

napisalem na szybko skrypcik:

#!/usr/bin/python

import os
import sys
import re
import readline

# Changes go here
CVSLOG = "/home/bartek/commits.log"
SIZEFILE = "/home/bartek/size.txt"
SECURITY = "/home/bartek/security.log"

# Main parse function
def CVSlogparse():
        lines = []
        # Seek where we last ended parsing

        # Read info about old size
        if os.path.isfile(SIZEFILE):
                f = open(SIZEFILE, 'r')
                oldsize = f.read().split('L')
                oldsize = long(oldsize[0])
                f.close()
        else:
                oldsize = 0

        f = open(CVSLOG)
        f.seek(oldsize) # end seeking
        read = f.xreadlines()
        for l in read:
                l = l.strip()
                lines.append(l)
        i = 0
        while(i < len(lines)):
                # Extract spec name
                if re.match('^Index\:.*\.spec', lines[i]):
                        spec = lines[i]
                        #print spec
                        fs = open(SECURITY, "a")
                        fs.write(spec)
                        fs.write("\n")
                        fs.close()
                        # Next 5 lines have nothing interesting (like
"$Log$" string)
                        i = i + 5
                        continue

                if lines[i] == "$Log$":
                        cvslog = 1
                        diff = []
                        while (i + cvslog < len(lines) and not
re.match('^Index\:.*\.spec', lines[i + cvslog])):
                                if re.match('^\+.*', lines[i+cvslog]):
                                        diff.append(lines[i+cvslog])
                                cvslog = cvslog + 1
                        fs = open(SECURITY, "a")
                        for d in range(len(diff)):
                                #print diff[d]
                                fs.write(diff[d])
                                fs.write("\n")
                        fs.close()

                        # Don't check already checked lines
                        i = i + cvslog - 1
                        continue

                # Increase i
                i = i + 1

        # Write new CVSLOG file size
        size = os.fstat(f.fileno())
        size = str(size).split(", ")
        fs = open(SIZEFILE, "w")
        fs.write(size[6])
        fs.close()

CVSlogparse()

ktory z przykladowego komita hawka (przypadkowo wybralem z komit listy):

Index: SPECS/kernel-bare-grsecurity.spec
diff -u SPECS/kernel-bare-grsecurity.spec:1.1.2.23
SPECS/kernel-bare-grsecurity.spec:1.1.2.24
--- SPECS/kernel-bare-grsecurity.spec:1.1.2.23  Sat Apr 19 17:15:27 2008
+++ SPECS/kernel-bare-grsecurity.spec   Mon Apr 21 08:49:36 2008
@@ -28,12 +28,10 @@
 %define                _postver        .5
 %define                _rel            1

-# for rc kernels basever is the version patch (source1) should be applied to
 #%define               _ver            2.6.20
-#%define               _rc                     rc4
-# for non rc-kernels these should be %{nil}
+#%define               _rc             rc4
 %define                _ver            %{nil}
-%define                _rc                     %{nil}
+%define                _rc             %{nil}

 Summary:       The Linux kernel (the core of the Linux operating system)
 Summary(de):   Der Linux-Kernel (Kern des Linux-Betriebssystems)
@@ -66,16 +64,15 @@

 # from http://www.grsecurity.net/~spender/
 Patch100:      linux-2.6-grsecurity.patch
-# from squashfs:
http://dl.sourceforge.net/sourceforge/squashfs/squashfs3.3.tar.gz for
linux-2.6.23
+# from squashfs:
http://dl.sourceforge.net/sourceforge/squashfs/squashfs3.3.tar.gz
 Patch101:      linux-2.6.24-squashfs.patch
-# official vendor driver for Marvell Yukon gigabit adapters, v10.22.4.3
+# official vendor driver for Marvell Yukon gigabit adapters
 Patch102:      linux-2.6.24-sk98lin.patch

 URL:           http://www.kernel.org/
 BuildRequires: binutils >= 3:2.14.90.0.7
 BuildRequires: gcc >= 5:3.2
 BuildRequires: module-init-tools
-# for hostname command
 BuildRequires: net-tools
 BuildRequires: perl-base
 BuildRequires: rpmbuild(macros) >= 1.217
@@ -120,8 +117,8 @@
 # modules will be looked from /lib/modules/%{kernel_release}
 # _localversion is just that without version for "> localversion"
 %define                _localversion %{release}
-%define                kernel_release %{version}_%{alt_kernel}-%{_localversion}
-%define                _kernelsrcdir   /usr/src/linux-%{version}_%{alt_kernel}
+%define                kernel_release %{version}-%{alt_kernel}-%{_localversion}
+%define                _kernelsrcdir   /usr/src/linux-%{version}-%{alt_kernel}

 %define        CommonOpts      HOSTCC="%{__cc}" HOSTCFLAGS="-Wall
-Wstrict-prototypes %{rpmcflags} -fomit-frame-pointer"
 %if "%{_target_base_arch}" != "%{_arch}"
@@ -141,7 +138,6 @@
 %define __features Enabled features:\
 %{?debug: - DEBUG}\
 %define Features %(echo "%{__features}" | sed '/^$/d')
-# vim: "

 %description
 This package contains the Linux kernel that is used to boot and run
@@ -379,7 +375,7 @@
 %patch102 -p1

 # Fix EXTRAVERSION in main Makefile
-sed -i 's#EXTRAVERSION =.*#EXTRAVERSION = %{_postver}_%{alt_kernel}#g' Makefile
+sed -i 's#EXTRAVERSION =.*#EXTRAVERSION = %{_postver}-%{alt_kernel}#g' Makefile

 sed -i -e '/select INPUT/d' net/bluetooth/hidp/Kconfig

@@ -619,23 +615,12 @@
 fi

 %post
-mv -f /boot/vmlinuz-%{alt_kernel} /boot/vmlinuz-%{alt_kernel}.old 2>
/dev/null > /dev/null
-mv -f /boot/System.map-%{alt_kernel}
/boot/System.map-%{alt_kernel}.old 2> /dev/null > /dev/null
 ln -sf vmlinuz-%{kernel_release} /boot/vmlinuz-%{alt_kernel}
 ln -sf System.map-%{kernel_release} /boot/System.map-%{alt_kernel}
-if [ ! -e /boot/vmlinuz ]; then
-       mv -f /boot/vmlinuz /boot/vmlinuz.old 2> /dev/null > /dev/null
-       mv -f /boot/System.map /boot/System.map.old 2> /dev/null > /dev/null
-       ln -sf vmlinuz-%{kernel_release} /boot/vmlinuz
-       ln -sf System.map-%{alt_kernel} /boot/System.map
-       mv -f %{initrd_dir}/initrd %{initrd_dir}/initrd.old 2>
/dev/null > /dev/null
-       ln -sf initrd-%{alt_kernel} %{initrd_dir}/initrd
-fi

 %depmod %{kernel_release}

 /sbin/geninitrd -f --initrdfs=rom
%{initrd_dir}/initrd-%{kernel_release}.gz %{kernel_release}
-mv -f %{initrd_dir}/initrd-%{alt_kernel}
%{initrd_dir}/initrd-%{alt_kernel}.old 2> /dev/null > /dev/null
 ln -sf initrd-%{kernel_release}.gz %{initrd_dir}/initrd-%{alt_kernel}

 if [ -x /sbin/new-kernel-pkg ]; then
@@ -653,7 +638,6 @@
 fi

 %post vmlinux
-mv -f /boot/vmlinux-%{alt_kernel} /boot/vmlinux-%{alt_kernel}.old 2>
/dev/null > /dev/null
 ln -sf vmlinux-%{kernel_release} /boot/vmlinux-%{alt_kernel}

 %post drm
@@ -687,7 +671,7 @@
 %postun headers
 if [ "$1" = "0" ]; then
       if [ -L %{_prefix}/src/linux-%{alt_kernel} ]; then
-               if [ "$(readlink %{_prefix}/src/linux-%{alt_kernel})"
= "linux-%{version}_%{alt_kernel}" ]; then
+               if [ "$(readlink %{_prefix}/src/linux-%{alt_kernel})"
= "linux-%{version}-%{alt_kernel}" ]; then
                       rm -f %{_prefix}/src/linux-%{alt_kernel}
               fi
       fi
@@ -703,14 +687,10 @@
 /lib/modules/%{kernel_release}/kernel/arch
 /lib/modules/%{kernel_release}/kernel/crypto
 /lib/modules/%{kernel_release}/kernel/drivers
-#%if %{have_oss} && %{have_isa}
-#%exclude /lib/modules/%{kernel_release}/kernel/drivers/media/radio/miropcm20*.ko*
-#%endif
 /lib/modules/%{kernel_release}/kernel/fs
 /lib/modules/%{kernel_release}/kernel/kernel
 /lib/modules/%{kernel_release}/kernel/lib
 /lib/modules/%{kernel_release}/kernel/net
-#/lib/modules/%{kernel_release}/kernel/security
 %dir /lib/modules/%{kernel_release}/kernel/sound
 /lib/modules/%{kernel_release}/kernel/sound/soundcore.*
 %if %{have_sound}
@@ -777,9 +757,6 @@
 %files sound-oss
 %defattr(644,root,root,755)
 /lib/modules/%{kernel_release}/kernel/sound/oss
-#%if %{have_isa}
-#/lib/modules/%{kernel_release}/kernel/drivers/media/radio/miropcm20*.ko*
-#%endif
 %endif                 # %{have_oss}
 %endif                 # %{have_sound}

@@ -858,6 +835,10 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org

 $Log$
+Revision 1.1.2.24  2008-04-21 06:49:36  hawk
+- /boot symlinks fix, dropped creating *.old file
+- cleanup, cosmetics
+
 Revision 1.1.2.23  2008-04-19 15:15:27  hawk
 - killed version macros


================================================================
Index: SPECS/kernel-bare-vserver.spec
diff -u SPECS/kernel-bare-vserver.spec:1.1.2.22
SPECS/kernel-bare-vserver.spec:1.1.2.23
--- SPECS/kernel-bare-vserver.spec:1.1.2.22     Sat Apr 19 17:15:27 2008
+++ SPECS/kernel-bare-vserver.spec      Mon Apr 21 08:49:36 2008
@@ -22,12 +22,10 @@
 %define                _postver        .5
 %define                _rel            1

-# for rc kernels basever is the version patch (source1) should be applied to
 #%define               _ver            2.6.20
-#%define               _rc                     rc4
-# for non rc-kernels these should be %{nil}
+#%define               _rc             rc4
 %define                _ver            %{nil}
-%define                _rc                     %{nil}
+%define                _rc             %{nil}

 Summary:       The Linux kernel (the core of the Linux operating system)
 Summary(de):   Der Linux-Kernel (Kern des Linux-Betriebssystems)
@@ -63,14 +61,13 @@
 Patch101:      linux-2.6-grsec-vs-minimal.patch
 # from squashfs:
http://dl.sourceforge.net/sourceforge/squashfs/squashfs3.3.tar.gz
 Patch102:      linux-2.6.24-squashfs.patch
-# official vendor driver for Marvell Yukon gigabit adapters, v10.50.1.3
+# official vendor driver for Marvell Yukon gigabit adapters
 Patch103:      linux-2.6.24-sk98lin.patch

 URL:           http://www.kernel.org/
 BuildRequires: binutils >= 3:2.14.90.0.7
 BuildRequires: gcc >= 5:3.2
 BuildRequires: module-init-tools
-# for hostname command
 BuildRequires: net-tools
 BuildRequires: perl-base
 BuildRequires: rpmbuild(macros) >= 1.217
@@ -114,8 +111,8 @@
 # modules will be looked from /lib/modules/%{kernel_release}
 # _localversion is just that without version for "> localversion"
 %define                _localversion %{release}
-%define                kernel_release %{version}_%{alt_kernel}-%{_localversion}
-%define                _kernelsrcdir   /usr/src/linux-%{version}_%{alt_kernel}
+%define                kernel_release %{version}-%{alt_kernel}-%{_localversion}
+%define                _kernelsrcdir   /usr/src/linux-%{version}-%{alt_kernel}

 %define        CommonOpts      HOSTCC="%{__cc}" HOSTCFLAGS="-Wall
-Wstrict-prototypes %{rpmcflags} -fomit-frame-pointer"
 %if "%{_target_base_arch}" != "%{_arch}"
@@ -135,7 +132,6 @@
 %define __features Enabled features:\
 %{?debug: - DEBUG}\
 %define Features %(echo "%{__features}" | sed '/^$/d')
-# vim: "

 %description
 This package contains the Linux kernel that is used to boot and run
@@ -375,7 +371,7 @@
 %patch103 -p1

 # Fix EXTRAVERSION in main Makefile
-sed -i 's#EXTRAVERSION =.*#EXTRAVERSION = %{_postver}_%{alt_kernel}#g' Makefile
+sed -i 's#EXTRAVERSION =.*#EXTRAVERSION = %{_postver}-%{alt_kernel}#g' Makefile

 sed -i -e '/select INPUT/d' net/bluetooth/hidp/Kconfig

@@ -594,23 +590,12 @@
 fi

 %post
-mv -f /boot/vmlinuz-%{alt_kernel} /boot/vmlinuz-%{alt_kernel}.old 2>
/dev/null > /dev/null
-mv -f /boot/System.map-%{alt_kernel}
/boot/System.map-%{alt_kernel}.old 2> /dev/null > /dev/null
 ln -sf vmlinuz-%{kernel_release} /boot/vmlinuz-%{alt_kernel}
 ln -sf System.map-%{kernel_release} /boot/System.map-%{alt_kernel}
-if [ ! -e /boot/vmlinuz ]; then
-       mv -f /boot/vmlinuz /boot/vmlinuz.old 2> /dev/null > /dev/null
-       mv -f /boot/System.map /boot/System.map.old 2> /dev/null > /dev/null
-       ln -sf vmlinuz-%{kernel_release} /boot/vmlinuz
-       ln -sf System.map-%{alt_kernel} /boot/System.map
-       mv -f %{initrd_dir}/initrd %{initrd_dir}/initrd.old 2>
/dev/null > /dev/null
-       ln -sf initrd-%{alt_kernel} %{initrd_dir}/initrd
-fi

 %depmod %{kernel_release}

 /sbin/geninitrd -f --initrdfs=rom
%{initrd_dir}/initrd-%{kernel_release}.gz %{kernel_release}
-mv -f %{initrd_dir}/initrd-%{alt_kernel}
%{initrd_dir}/initrd-%{alt_kernel}.old 2> /dev/null > /dev/null
 ln -sf initrd-%{kernel_release}.gz %{initrd_dir}/initrd-%{alt_kernel}

 if [ -x /sbin/new-kernel-pkg ]; then
@@ -628,7 +613,6 @@
 fi

 %post vmlinux
-mv -f /boot/vmlinux-%{alt_kernel} /boot/vmlinux-%{alt_kernel}.old 2>
/dev/null > /dev/null
 ln -sf vmlinux-%{kernel_release} /boot/vmlinux-%{alt_kernel}

 %post drm
@@ -662,7 +646,7 @@
 %postun headers
 if [ "$1" = "0" ]; then
       if [ -L %{_prefix}/src/linux-%{alt_kernel} ]; then
-               if [ "$(readlink %{_prefix}/src/linux-%{alt_kernel})"
= "linux-%{version}_%{alt_kernel}" ]; then
+               if [ "$(readlink %{_prefix}/src/linux-%{alt_kernel})"
= "linux-%{version}-%{alt_kernel}" ]; then
                       rm -f %{_prefix}/src/linux-%{alt_kernel}
               fi
       fi
@@ -678,9 +662,6 @@
 /lib/modules/%{kernel_release}/kernel/arch
 /lib/modules/%{kernel_release}/kernel/crypto
 /lib/modules/%{kernel_release}/kernel/drivers
-#%if %{have_oss} && %{have_isa}
-#%exclude /lib/modules/%{kernel_release}/kernel/drivers/media/radio/miropcm20*.ko*
-#%endif
 /lib/modules/%{kernel_release}/kernel/fs
 /lib/modules/%{kernel_release}/kernel/kernel
 /lib/modules/%{kernel_release}/kernel/lib
@@ -752,9 +733,6 @@
 %files sound-oss
 %defattr(644,root,root,755)
 /lib/modules/%{kernel_release}/kernel/sound/oss
-#%if %{have_isa}
-#/lib/modules/%{kernel_release}/kernel/drivers/media/radio/miropcm20*.ko*
-#%endif
 %endif                 # %{have_oss}
 %endif                 # %{have_sound}

@@ -832,6 +810,10 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org

 $Log$
+Revision 1.1.2.23  2008-04-21 06:49:36  hawk
+- /boot symlinks fix, dropped creating *.old file
+- cleanup, cosmetics
+
 Revision 1.1.2.22  2008-04-19 15:15:27  hawk
 - killed version macros

wydobywa krytyczne dla security.pld informacje w postaci:
Index: SPECS/kernel-bare-grsecurity.spec
+Revision 1.1.2.24  2008-04-21 06:49:36  hawk
+- /boot symlinks fix, dropped creating *.old file
+- cleanup, cosmetics
+
Index: SPECS/kernel-bare-vserver.spec
+Revision 1.1.2.23  2008-04-21 06:49:36  hawk
+- /boot symlinks fix, dropped creating *.old file
+- cleanup, cosmetics
+

i zapisuje do pliku security.log.
Ten plik bylby parsowany przez security.pld a commits.log bylby wolny
od diffow i nie roslby az tak szybko.
Problem tylko taki by ten skrypt dostosowac do pobierania danych z
stdin a nie z pliku (ktos wie jak to w pythonie napisac? zeby jakos
via pipe to przetwarzac lub jakos inaczej) i dopisac do wykonywania
jako postscript w cvsie (do czego ja nie mam ACLi).
O komentarze prosze ludzi zainteresowanych, a niezainteresowanych o
przemilczenie tematu jesli nie maja nic konstruktywnego do wniesienia.

Dzieki,

shadzik


Więcej informacji o liście dyskusyjnej pld-devel-pl