[ add comment ] ( 4 views ) | [ 0 trackbacks ] | permalink
sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txthttp://www.brunolinux.com/02-The_Termin ... h_Sed.html
[ add comment ] ( 4 views ) | [ 0 trackbacks ] | permalink
while read line
do
echo "MAC=$line"
done < mac-hex-codes.txt > mac-hex-codes2.txt
[ add comment ] ( 6 views ) | [ 0 trackbacks ] | permalink
Search for the torrent at http://torrent.ibiblio.org/.
[ add comment ] ( 6 views ) | [ 0 trackbacks ] | permalink
The pythons module binascii is suitable for conversion between ascii and hex.
$ python
>>> import binascii
>>> binascii.unhexlify('7461696C202F7661722F6C6F672F6D65737361676573')
'tail /var/log/messages'
more at: http://blog.dispatched.ch/2009/12/09/py ... unhexlify/
[ add comment ] ( 6 views ) | [ 0 trackbacks ] | permalink
pro vygenerování páru klíče
$ gpg --gen-key
$ gpg --list-keys
$ gpg --export -a xxx' > custom_RPM_package_key.txt
vlastní podpis balíčku během procesu tvorby balíčku
$ rpm -ba --sign package-version.spec
kontrola signatury
$ rpm --checksig package-version.i386.rpm
opětovné podepsání
$ rpm --resign package-version.i386.rpm
podepsání po vytvoření balíčku, dodatečně
$ rpm --addsign package-version.i386.rpm
import klíče vlastního veřejného klíče do RPM
rpm --import RPM-GPG-KEY
prohledání RPM databáze na obsažené klíče
$ rpm -qa gpg-pubkey*
zobrazení detailů pro imporotvané RPM klíče
$ rpm -qi gpg-pubkey-db42a60e
vyjmutí/zneplatnění klíče
$ rpm -e gpg-pubkey-keyhash
[ add comment ] ( 5 views ) | [ 0 trackbacks ] | permalink
spec file:
soubor, který popisuje jakým způsobem bude balík generován a co bude obsahovat. spec file je návod pro příkaz rpmbuild jak a s jakými parametry zkompilovat zdrojový kód, kam provést instalaci a jaké akce je nutné provést před a po instalaci balíku. spec soubor obsahuje popis balíku, makra, soupis souborů a příkazy shellu.
tags:
pomocí tagů se definují vlastnosti balíku jak pro kompilaci, tak i pro instalaci a zařazení do rpm databáze. úplný tag se skládá z klíčového slova a hodnoty tagu <tag>:<hodnota>. popisy významu tagů jsou uvedeny zde: http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html
Name:
Release:
Summary:
Vendor:
Copyright:
Distribution:
Icon:
Vendor:
URL:
Group:
Packager:
Provides:
Requires:
Conflicts:
Serial:
AutoReqProv:
ExcludeArch:
ExclusiveArch:
ExcludeOS:
ExclusiveOS:
Source:
Nosource:
Patch:
# vytvoření patche pro zdrojový kód. patche jsou stejně jako zdrojový tgzumístěny v adresáři ~/rpmbuild/SOURCES. vytvoření patche se provede použitím příkazu diff:
# diff -Naur sudosh2-1.0.3.vanilla/ sudosh2-1.0.3/ > \
# ~/rpmbuild/SOURCES/sudosh2-1.0.3.patch
NoPatch:
Prefix:
BuildRoot:
%description
%changelog
*Prefix = prefix tag je použit pokud je vytvářen relokovatelný balík, tj balík který lze instalovat do specifického adresáře od adresáře systémového kořene
*Buildroot = adresář kam je balík instalován během procesu vytváření balíku, například v případě, kdy by instalace binárek balíku při vytváření mohla kolidovat s funkcionalitou systému - například běžící SMTP a SMTP pro který se balík právě vytváří
*Requires tag může přesněji specifikovat verzi jiného balíku, na kterém je náš balík závislý (například Requires: bar >= 2.7-4, baz = 2.1-1)
makra:
makra zjednoduššují proces tvorby balíku a jsou uvozeny znakem %. při procházením soboru spec příkazem rpmbuild makra expandují do sekvencí příkazů které provádí specifické činnosti. tyto činnosti mohou být například získání zdrojového kódu z url (%setup), rozbalení zdrojového kódu (%setup) a opatchvonání zdrojového kódu. makra rovněž zvyšují čitelnost spec souboru a logicky jej rozdělují do jednotlivých sekcí.
<----------- část spec souboru definující jak se bude zdrojový kód kompilovat ---------->
%prep
<commands>
%setup
%patch
%build
<configure>
%install
<make install>
%clean
<make clean>
<----------- část, která se provádí při vlastní instalaci balíku na cílovém systému ---------->
%pre
<commands ie. check the system environment>
%post
<commands ie. chkconfig --level 3 mydaemon on>
%verifyscript
<commands ie. service mydaemon status>
%files
<soubory, které balík obsahuje>
elegantní cestou jak připravit seznam souborů je použití
adresáře výhradně určeného pro daný balík
(použití %topdir) a pomocí hvězdičkové konvence
zahrnutí všech souborů, které se vyskytují v daném adresáři
%files -f %{name}.lang
%defattr(-, root, root)
%doc AUTHORS COPYING ChangeLog NEWS README TODO
%{_bindir}/*
%{_libdir}/*.so.*
%{_datadir}/%{name}
%{_mandir}/man8/*
%preun
<commands ie. service mydaemon stop; chkconfig --level 3 mydaemon off>
%postun
<commands ie. rm -rf /var/log/mydaemon.log>
některá makra %scripts mají možnost ovlivnit jejich chování pomocí přepínačů, popis je k dispozici zde: http://www.rpm.org/max-rpm/s1-rpm-inside-macros.html
v rámci balíku je jednou z hlavních sekcí sekce definující soubory začleněné v balíku. sekce %files je zdokumentována zde: http://www.rpm.org/max-rpm/s1-rpm-insid ... tives.html
podmínky:
v rámci spec souboru je rovněž možné definovat podmínky pro zpracování některých částí kódu pomocí %ifarch, %ifnarch, %ifos, %ifnos, %else, %endif
proměnné:
všechny proměnné prostředí uvedené níže mohou být použity ve spec souboru během procesu tvorby balíku.hodnoty proměnných jsou nastaveny automaticky během procesu tvorby balíku. http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html
RPM_SOURCE_DIR, RPM_BUILD_DIR, RPM_DOC_DIR, RPM_OPT_FLAGS,
RPM_ARCH, RPM_OS, RPM_ROOT_DIR, RPM_BUILD_ROOT, RPM_PACKAGE_NAME
RPM_PACKAGE_VERSION, RPM_PACKAGE_RELEASE
dokumentace pro vývojáře:
/usr/share/doc/rpm-4.4.2.3/
vlastní prostředí:
pokud je balík překládán pod účtem běžného uživatele pak tento nemá možnost zápisu do systémem definovaných adresářů /usr/src/redhat/{BUILD,RPMS,S{OURCE,PEC,RPM}S}. proto je nutné v domovském adresáři uživatele definovat vlastní strukturu odpovídající struktuře vyžadované příkazem rpmbuild. tato adresářová struktura je definována v souboru ~/.rpmmacros, který je čten při každém spuštění příkazem rpmbuild.
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
$ cat ~/.rpmmacros
# RPM directory macros
%_topdir %(echo "$HOME")/rpmbuild
%_builddir %_topdir/BUILD
%_rpmdir %_topdir/RPMS
%_sourcedir %_topdir/SOURCES
%_specdir %_topdir/SPECS
%_srcrpmdir %_topdir/SRPMS
%_buildroot %_topdir/%{name}-root
# Macros mimicking autoconf variables
%_sysconfdir %_buildroot/etc
%_prefix usr/local
%_exec_prefix %_prefix
%_bindir %_buildroot/exec_prefix/bin
%_lib %_buildroot/lib (lib64 on 64bit systems)
%_libdir %_buildroot/%_exec_prefix/%{_lib}
%_libexecdir %_buildroot/%_exec_prefix/libexec
%_sbindir %_buildroot/%_exec_prefix/sbin
%_sharedstatedir %_buildroot/var/lib
%_datadir %_buildroot/%_prefix/share
%_includedir %_buildroot/%_prefix/include
%_oldincludedir %_buildroot/usr/include
%_infodir %_buildroot/usr/share/info
%_mandir %_buildroot/usr/local/share/man
%_localstatedir %_buildroot/var
%_initddir %_buildroot/%_sysconfdir/rc.d/init.d
# GPG signature related
%_signature gpg
%_gpg_name xxx xxx
# $ rpmbuild -ba [ --sign ] [ --buildroot ] DIR some.spec
#
# [ --buildroot ] overrides local .rpmmacros
#
# create a patch if necessary. patches should be placed in
# ~/rpmbuild/SOURCES. construct patch using diff as in example.
# diff -Naur sudosh2-1.0.3.vanilla/ sudosh2-1.0.3/ > \
# ~/rpmbuild/SOURCES/sudosh2-1.0.3.patch
Summary: sw package for Linux
Name: sw
Requires: libgcc
Conflicts: xxx
Packager: xxx@xxx.com
License: Open Software License 3.0 (OSL3.0)
Version: 1.0.3
Release: 0
Vendor: SourceForge
BuildArch: x86_64
Group: Applications/System
Source0: sw-1.0.3.tar.gz
Patch0: sw-1.0.3.patch
BuildRoot: %_buildroot
#AutoReqProv: no
URL: http:\\alchy.org
%description
popis k balíku na více řádků
%prep
%setup
%patch0 -p1
# %build
./configure --with-defshell=/bin/bash \
--prefix=%_buildroot \
--bindir=%_bindir --sysconfdir=%_sysconfdir --mandir=%_mandir
make
%install
make install
make clean
%pre
%preun
%postun
%changelog
* Tue Apr 15 2010 xxx xxx
- Initial release
[ add comment ] ( 3 views ) | [ 0 trackbacks ] | permalink
[ add comment ] ( 4 views ) | [ 0 trackbacks ] | permalink
# counts number of unique occurences of the cr terminated sting
# in a file (python3)
import os
unique_ip = set()
list_ip = []
myFile = "d:\\tmp\ip_test.txt"
if not ( os.path.isfile( myFile ) ):
print("File does not exist")
exit
file = open( myFile, 'r')
for line in file.readlines():
unique_ip.add( line )
list_ip.append( line )
file.close()
for item in unique_ip:
print( item.rstrip() , ";", list_ip.count( item ) )
# alternative:
# print ([(item, list_ip.count(item)) for item in unique_ip])
[ add comment ] ( 4 views ) | [ 0 trackbacks ] | permalink
Linux Journal article about kernel logging. The article explains explains /proc/kmsg, printk, sys_syslog and other interesting kernel logging how-to.
klogd reads kernel log messages and helps process and send those messages to the appropriate files, sockets or users. This month we discuss memory address resolution and how to modify klogd's default behavior using command-line switches.
http://www.linuxjournal.com/article/4058?page=0,0
[ add comment ] ( 5 views ) | [ 0 trackbacks ] | permalink