diff options
Diffstat (limited to 'core/procps')
20 files changed, 916 insertions, 0 deletions
diff --git a/core/procps/PKGBUILD b/core/procps/PKGBUILD new file mode 100644 index 000000000..225e4db6f --- /dev/null +++ b/core/procps/PKGBUILD @@ -0,0 +1,75 @@ +# $Id: PKGBUILD 102904 2010-12-12 23:53:18Z eric $ +# Maintainer: Eric Belanger <eric@archlinux.org> + +pkgname=procps +pkgver=3.2.8 +pkgrel=3 +pkgdesc="Utilities for monitoring your system and processes on your system" +arch=('i686' 'x86_64') +url="http://procps.sourceforge.net/" +license=('GPL' 'LGPL') +groups=('base') +depends=('ncurses') +backup=('etc/sysctl.conf') +source=(http://procps.sourceforge.net/procps-${pkgver}.tar.gz sysctl.conf\ + groff-top-manpage.patch procps-3.2.7-free-hlmem.patch\ + procps-3.2.7-longcmd.patch procps-3.2.7-ps-man-fmt.patch\ + procps-3.2.7-psman.patch procps-3.2.7-slabtop-once.patch\ + procps-3.2.7-top-clrscr.patch procps-3.2.7-top-cpu0.patch\ + procps-3.2.7-top-env-cpuloop.patch procps-3.2.7-top-manpage.patch\ + procps-3.2.7-top-remcpu.patch procps-3.2.7-top-sorthigh.patch\ + procps-3.2.7-watch-unicode.patch procps-3.2.7-w-best.patch\ + procps-3.2.8+gmake-3.82.patch procps-3.2.8-setlocale.patch\ + procps-3.2.8-threads.patch procps-3.2.8-linux-ver-init.patch) +md5sums=('9532714b6846013ca9898984ba4cd7e0' '9be3a131a7068aae11418e6dd99e2221'\ + '111f33c3fd8fab2fed36c279065fefff' '81ac7fb50fcdb03e57055c7b763bb275'\ + 'cb020bfd46689908b56bf3fc5a55828a' '8d74603be1e426037a1e2c2743ef7345'\ + 'bfb7530e248b86f1abf32bca09f28b68' '9a8c81aee89531b4a72f4e4e44fb055d'\ + '511023a3f39a90aa6efcf77120d32eb6' 'f29ef0b3a74767469651c9c335f09403'\ + 'd49673c19fa1a70f8e03fc1c24233458' '669955ca7fa7688e1c3ae7e723e0a567'\ + 'f77626450619b4bebbd67b9e164f1857' 'c71b853144b4d22b861e435362845091'\ + '105fbbf179e63b7ca960a2dd2e5fab5b' '7f2540d2d4a2a1a6af70e9a980835753'\ + '8d1025ae906bf0320ad9bb5095f1b970' '2e6cce598f11d75becebbe58dbe9cbd4'\ + 'e2e5393d49034435c68469d008d56489' '6f46c8ea37c447a2d478883e89bf4d25') +sha1sums=('a0c86790569dec26b5d9037e8868ca907acc9829' '9b9a314010d042b5aa487893c06f361531525e6a'\ + 'bdd627f602ed2e38994d49309de0edbd90b41aff' 'da1b9e61f8df4a8e23a7032b245dd99e32e2c01c'\ + '1a656d8094be41e019b2a9598b07c8a3d47f9de3' 'ba9ad9f0bde3e84484b5a0238e53534438e924be'\ + '9944224ed2f5bd7d7fb505127bd71d6f01d88373' '954026785a9e6c90d796e93563fcea2a693691e8'\ + '8582cd15346fa939f3fd01081620de0ffc617335' '80e31310da53baf095e905d94485324932e433df'\ + '15fe886a2b4bed5885e6d457954e1145d1dcd2a2' '16737700b22eec8f4e8d16bce099f4b1662501e2'\ + 'bce21809ee0cb917ddf5b0c0bf2a91ea50feb0c6' '1be00d71e8e16ff2d656e5dd1f9988f2f3c0d5a0'\ + '52068a433535ec3d5d974141be3d6d3b6a41725a' '3a8f1ba912112d7520becb28746e97b11d9b0c86'\ + '3a4908ed8dbc936e39cb9094af8098ef9e656581' '09b1f6a3f9691b9f1432549a7a74a90ee5cfbdde'\ + '926b92913201f21c45d48436c0902cffc059ce27' '171d5352940200c209e0c2d43c17f01c02173a66') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -p1 < ../groff-top-manpage.patch + patch -p1 < ../procps-3.2.7-top-manpage.patch + patch -p1 < ../procps-3.2.7-free-hlmem.patch + patch -p1 < ../procps-3.2.7-ps-man-fmt.patch + patch -p1 < ../procps-3.2.7-psman.patch + patch -p1 < ../procps-3.2.7-longcmd.patch + patch -p1 < ../procps-3.2.7-slabtop-once.patch + patch -p1 < ../procps-3.2.7-top-clrscr.patch + patch -p1 < ../procps-3.2.7-top-cpu0.patch + patch -p1 < ../procps-3.2.7-top-env-cpuloop.patch + patch -p1 < ../procps-3.2.7-top-remcpu.patch + patch -p1 < ../procps-3.2.7-top-sorthigh.patch + patch -p1 < ../procps-3.2.7-watch-unicode.patch + patch -p1 < ../procps-3.2.7-w-best.patch + patch -p1 < ../procps-3.2.8+gmake-3.82.patch + patch -p1 < ../procps-3.2.8-setlocale.patch + patch -p1 < ../procps-3.2.8-threads.patch + patch -p0 < ../procps-3.2.8-linux-ver-init.patch + sed -i "s:\$(lib64):lib:" Makefile + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" ldconfig=/bin/true install + install -D -m644 "${srcdir}/sysctl.conf" "${pkgdir}/etc/sysctl.conf" + install -d "${pkgdir}/usr/include/proc" + install -m644 proc/*.h "${pkgdir}/usr/include/proc" +} diff --git a/core/procps/groff-top-manpage.patch b/core/procps/groff-top-manpage.patch new file mode 100644 index 000000000..625053c72 --- /dev/null +++ b/core/procps/groff-top-manpage.patch @@ -0,0 +1,39 @@ +diff -Naur procps-3.2.8-orig//top.1 procps-3.2.8/top.1 +--- procps-3.2.8-orig//top.1 2010-11-19 00:43:13.000000000 -0500 ++++ procps-3.2.8/top.1 2010-11-19 00:44:06.000000000 -0500 +@@ -42,7 +42,7 @@ + .ds EM \ \fB\-\-\ \fR + \# - these two are for chuckles, makes great grammar + .ds Me top +-.ds ME \fBtop\fR ++.ds MM \fBtop\fR + \# - other misc strings for consistent usage/emphasis + .ds F \fIOff\fR + .ds O \fIOn\fR +@@ -85,7 +85,7 @@ + .\" ---------------------------------------------------------------------- + .SH SYNOPSIS + .\" ---------------------------------------------------------------------- +-\*(ME \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI ++\*(MM \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI + iterations\fR \-\fBp\fI pid\fR [,\fI pid\fR ...] + + The traditional switches '-' and whitespace are optional. +@@ -94,7 +94,7 @@ + .\" ---------------------------------------------------------------------- + .SH DESCRIPTION + .\" ---------------------------------------------------------------------- +-The \*(ME program provides a dynamic real-time view of a running system. ++The \*(MM program provides a dynamic real-time view of a running system. + It can display\fB system\fR summary information as well as a list of\fB + tasks\fR currently being managed by the Linux kernel. + The types of system summary information shown and the types, order and +@@ -104,7 +104,7 @@ + The program provides a limited interactive interface for process + manipulation as well as a much more extensive interface for personal + configuration \*(EM encompassing every aspect of its operation. +-And while \*(ME is referred to throughout this document, you are free ++And while \*(MM is referred to throughout this document, you are free + to name the program anything you wish. + That new name, possibly an alias, will then be reflected on \*(Me's display + and used when reading and writing a \*(CF. diff --git a/core/procps/procps-3.2.7-free-hlmem.patch b/core/procps/procps-3.2.7-free-hlmem.patch new file mode 100644 index 000000000..c5ef9cc4c --- /dev/null +++ b/core/procps/procps-3.2.7-free-hlmem.patch @@ -0,0 +1,23 @@ +diff -up procps-3.2.7/free.1.hlmem procps-3.2.7/free.1 +--- procps-3.2.7/free.1.hlmem 2009-02-24 10:54:35.000000000 +0100 ++++ procps-3.2.7/free.1 2009-02-24 11:00:26.000000000 +0100 +@@ -7,7 +7,7 @@ free \- Display amount of free and used + .SH SYNOPSIS + .BR "free " [ "\-b" " | " "\-k" " | " "\-m" "] [" "\-o" "] [" "\-s" + .I delay +-.RB "] [" "\-t" "] [" "\-V" ] ++.RB "] [" "\-t" "] [" "\-l" "] [" "\-V" "] + .SH DESCRIPTION + \fBfree\fP displays the total amount of free and used physical and swap + memory in the system, as well as the buffers used by the kernel. +@@ -28,7 +28,9 @@ may actually specify any floating point + .BR usleep (3) + is used for microsecond resolution delay times. + .PP +-The \fB\-V\fP displays version information. ++The \fB-l\fP switch shows detailed low and high memory statistics. ++.PP ++The \fB\-V\fP switch displays version information. + .SH FILES + .ta + .IR /proc/meminfo "\-\- memory information" diff --git a/core/procps/procps-3.2.7-longcmd.patch b/core/procps/procps-3.2.7-longcmd.patch new file mode 100644 index 000000000..7c4fdca36 --- /dev/null +++ b/core/procps/procps-3.2.7-longcmd.patch @@ -0,0 +1,22 @@ +--- procps-3.2.7/proc/readproc.c.kzak 2006-06-16 10:18:13.000000000 +0200 ++++ procps-3.2.7/proc/readproc.c 2006-09-27 11:25:13.000000000 +0200 +@@ -432,14 +432,17 @@ + if(fd==-1) return NULL; + + /* read whole file into a memory buffer, allocating as we go */ +- while ((n = read(fd, buf, sizeof buf - 1)) > 0) { ++ while ((n = read(fd, buf, sizeof buf - 1)) >= 0) { + if (n < (int)(sizeof buf - 1)) + end_of_file = 1; +- if (n == 0 && rbuf == 0) ++ if (n == 0 && rbuf == 0) { ++ close(fd); + return NULL; /* process died between our open and read */ ++ } + if (n < 0) { + if (rbuf) + free(rbuf); ++ close(fd); + return NULL; /* read error */ + } + if (end_of_file && buf[n-1]) /* last read char not null */ diff --git a/core/procps/procps-3.2.7-ps-man-fmt.patch b/core/procps/procps-3.2.7-ps-man-fmt.patch new file mode 100644 index 000000000..f3a80dca7 --- /dev/null +++ b/core/procps/procps-3.2.7-ps-man-fmt.patch @@ -0,0 +1,12 @@ +diff -up procps-3.2.7/ps/ps.1.ps-man-fmt procps-3.2.7/ps/ps.1 +--- procps-3.2.7/ps/ps.1.ps-man-fmt 2008-09-01 11:43:18.000000000 +0200 ++++ procps-3.2.7/ps/ps.1 2008-09-01 11:43:41.000000000 +0200 +@@ -30,7 +30,7 @@ + .\" the space needed for the 1st two columns. + .\" Making it messy: inches, ens, points, scaled points... + .\" +-.nr ColSize ((\n(.lu-\n(.iu/\n(.Hu-20u)n) ++.nr ColSize ((\n[.l] - \n[.i]) / 1n - 20) + .\" + .\" This is for command options + .nr OptSize (16u) diff --git a/core/procps/procps-3.2.7-psman.patch b/core/procps/procps-3.2.7-psman.patch new file mode 100644 index 000000000..7ba6cff34 --- /dev/null +++ b/core/procps/procps-3.2.7-psman.patch @@ -0,0 +1,22 @@ +--- procps-3.2.7/ps/ps.1.psman 2007-06-20 08:30:47.000000000 +0200 ++++ procps-3.2.7/ps/ps.1 2007-06-20 08:50:10.000000000 +0200 +@@ -21,8 +21,8 @@ + .\" See /usr/share/groff/current/tmac/an-old.tmac for what these do. + .\" Setting them to zero provides extra space, but only do that for + .\" plain text output. PostScript and such will remain indented. +-.if n .nr IN 0n +-.if n .nr an-prevailing-indent 0n ++.\" .if n .nr IN 0n ++.\" .if n .nr an-prevailing-indent 0n + .\" + .\" + .\" ColSize is used for the format spec table. +@@ -838,6 +838,8 @@ + .\" lB1 lB1 lBw(5.5i) + .\" lB1 l1 l. + .\" ++.RE ++ + .TS + expand; + lB1 lB1 lBw(\n[ColSize]n) diff --git a/core/procps/procps-3.2.7-slabtop-once.patch b/core/procps/procps-3.2.7-slabtop-once.patch new file mode 100644 index 000000000..d3319cfe7 --- /dev/null +++ b/core/procps/procps-3.2.7-slabtop-once.patch @@ -0,0 +1,113 @@ +diff -up procps-3.2.7/slabtop.c.once procps-3.2.7/slabtop.c +--- procps-3.2.7/slabtop.c.once 2008-12-11 13:24:52.000000000 +0100 ++++ procps-3.2.7/slabtop.c 2008-12-11 13:33:12.000000000 +0100 +@@ -268,9 +268,24 @@ static void parse_input(char c) + } + } + ++/*printw or printf depending on the context*/ ++static void printwf(int once, const char *s,...) ++{ ++va_list va; ++ ++va_start(va,s); ++if(once) ++ vprintf(s,va); ++else ++ vwprintw(stdscr, s, va); ++va_end(va); ++} ++ ++ + int main(int argc, char *argv[]) + { + int o; ++ int once = 0; + unsigned short old_rows; + struct slab_info *slab_list = NULL; + +@@ -307,6 +322,7 @@ int main(int argc, char *argv[]) + break; + case 'o': + delay = 0; ++ once = 1; + break; + case 'V': + display_version(); +@@ -322,12 +338,18 @@ int main(int argc, char *argv[]) + if (tcgetattr(0, &saved_tty) == -1) + perror("tcgetattr"); + +- initscr(); +- term_size(0); +- old_rows = rows; +- resizeterm(rows, cols); +- signal(SIGWINCH, term_size); +- signal(SIGINT, sigint_handler); ++ if(!once) { ++ initscr(); ++ term_size(0); ++ old_rows = rows; ++ resizeterm(rows, cols); ++ signal(SIGWINCH, term_size); ++ signal(SIGINT, sigint_handler); ++ } else { ++ old_rows = rows; ++ rows = 80; ++ cols = 24; ++ } + + do { + struct slab_info *curr; +@@ -341,12 +363,12 @@ int main(int argc, char *argv[]) + break; + + if (old_rows != rows) { +- resizeterm(rows, cols); ++ if(!once) resizeterm(rows, cols); + old_rows = rows; + } + + move(0,0); +- printw( " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n" ++ printwf(once, " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n" + " Active / Total Slabs (%% used) : %d / %d (%.1f%%)\n" + " Active / Total Caches (%% used) : %d / %d (%.1f%%)\n" + " Active / Total Size (%% used) : %.2fK / %.2fK (%.1f%%)\n" +@@ -360,15 +382,15 @@ int main(int argc, char *argv[]) + + slab_list = slabsort(slab_list); + +- attron(A_REVERSE); +- printw( "%6s %6s %4s %8s %6s %8s %10s %-23s\n", ++ if(!once) attron(A_REVERSE); ++ printwf(once, "%6s %6s %4s %8s %6s %8s %10s %-23s\n", + "OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS", + "OBJ/SLAB", "CACHE SIZE", "NAME"); +- attroff(A_REVERSE); ++ if(!once) attroff(A_REVERSE); + + curr = slab_list; + for (i = 0; i < rows - 8 && curr->next; i++) { +- printw("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n", ++ printwf(once, "%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n", + curr->nr_objs, curr->nr_active_objs, curr->use, + curr->obj_size / 1024.0, curr->nr_slabs, + curr->objs_per_slab, (unsigned)(curr->cache_size / 1024), +@@ -376,7 +398,7 @@ int main(int argc, char *argv[]) + curr = curr->next; + } + +- refresh(); ++ if(!once) refresh(); + put_slabinfo(slab_list); + + FD_ZERO(&readfds); +@@ -392,6 +414,6 @@ int main(int argc, char *argv[]) + + tcsetattr(0, TCSAFLUSH, &saved_tty); + free_slabinfo(slab_list); +- endwin(); ++ if(!once) endwin(); + return 0; + } diff --git a/core/procps/procps-3.2.7-top-clrscr.patch b/core/procps/procps-3.2.7-top-clrscr.patch new file mode 100644 index 000000000..8a0256846 --- /dev/null +++ b/core/procps/procps-3.2.7-top-clrscr.patch @@ -0,0 +1,19 @@ +diff -up procps-3.2.7/top.c.clrscr procps-3.2.7/top.c +--- procps-3.2.7/top.c.clrscr 2008-04-08 08:49:48.000000000 +0200 ++++ procps-3.2.7/top.c 2008-04-08 08:50:07.000000000 +0200 +@@ -2109,6 +2109,7 @@ static void fields_sort (void) + *p = x + 'A'; + Curwin->rc.sortindx = x; + putp(Cap_curs_norm); ++ putp(Cap_clr_scr); + } + + +@@ -2134,6 +2135,7 @@ static void fields_toggle (void) + *p = i + 'A'; + } + putp(Cap_curs_norm); ++ putp(Cap_clr_scr); + } + + /*###### Windows/Field Groups support #################################*/ diff --git a/core/procps/procps-3.2.7-top-cpu0.patch b/core/procps/procps-3.2.7-top-cpu0.patch new file mode 100644 index 000000000..eb81121c5 --- /dev/null +++ b/core/procps/procps-3.2.7-top-cpu0.patch @@ -0,0 +1,20 @@ +--- procps-3.2.7/top.c.orig 2007-09-07 21:28:41.000000000 +0100 ++++ procps-3.2.7/top.c 2007-09-07 21:29:15.000000000 +0100 +@@ -959,8 +959,15 @@ + + // and just in case we're 2.2.xx compiled without SMP support... + if (Cpu_tot == 1) { +- cpus[1].id = 0; +- memcpy(cpus, &cpus[1], sizeof(CPU_t)); ++ cpus[0].id = cpus[1].id = 0; ++ cpus[0].u = cpus[1].u; ++ cpus[0].n = cpus[1].n; ++ cpus[0].s = cpus[1].s; ++ cpus[0].i = cpus[1].i; ++ cpus[0].w = cpus[1].w; ++ cpus[0].x = cpus[1].x; ++ cpus[0].y = cpus[1].y; ++ cpus[0].z = cpus[1].z; + } + + // now value each separate cpu's tics diff --git a/core/procps/procps-3.2.7-top-env-cpuloop.patch b/core/procps/procps-3.2.7-top-env-cpuloop.patch new file mode 100644 index 000000000..0034dcafb --- /dev/null +++ b/core/procps/procps-3.2.7-top-env-cpuloop.patch @@ -0,0 +1,84 @@ +diff -up procps-3.2.7/top.c.p15 procps-3.2.7/top.c +--- procps-3.2.7/top.c.p15 2008-09-01 11:37:51.000000000 +0200 ++++ procps-3.2.7/top.c 2008-09-01 11:37:51.000000000 +0200 +@@ -121,6 +121,7 @@ static int No_ksyms = -1, // set t + Batch = 0, // batch mode, collect no input, dumb output + Loops = -1, // number of iterations, -1 loops forever + Secure_mode = 0; // set if some functionality restricted ++static int CPU_loop = 0; // wait for reliable CPU data + + /* Some cap's stuff to reduce runtime calls -- + to accomodate 'Batch' mode, they begin life as empty strings */ +@@ -1679,6 +1680,9 @@ static void before (char *me) + Fieldstab[P_PPD].fmts = pid_fmt; + Fieldstab[P_PPD].head = " PPID" + 10 - pid_digits; + } ++ ++ if (( getenv("CPULOOP")) && ( atoi(getenv("CPULOOP")) == 1 )) ++ CPU_loop = 1; + } + + +@@ -2978,6 +2981,7 @@ static proc_t **summary_show (void) + { + static proc_t **p_table = NULL; + static CPU_t *smpcpu = NULL; ++ static int first = 0; + + // whoa first time, gotta' prime the pump... + if (!p_table) { +@@ -3025,6 +3029,28 @@ static proc_t **summary_show (void) + + smpcpu = cpus_refresh(smpcpu); + ++ if (first==0 && CPU_loop) ++ { ++ int i; ++ CPU_t *cpu; ++ for (i = 0; i < Cpu_tot; i++) { ++ cpu = &smpcpu[i]; ++ cpu->u_sav = cpu->u; ++ cpu->s_sav = cpu->s; ++ cpu->n_sav = cpu->n; ++ cpu->i_sav = cpu->i; ++ cpu->w_sav = cpu->w; ++ cpu->x_sav = cpu->x; ++ cpu->y_sav = cpu->y; ++ cpu->z_sav = cpu->z; ++ } ++ tv.tv_sec = Rc.delay_time; ++ tv.tv_usec = (Rc.delay_time - (int)Rc.delay_time) * 1000000; ++ select(0, NULL, NULL, NULL, &tv); ++ ++ smpcpu = cpus_refresh(smpcpu); ++ } ++ + if (CHKw(Curwin, View_CPUSUM)) { + // display just the 1st /proc/stat line + summaryhlp(&smpcpu[Cpu_tot], "Cpu(s):"); +@@ -3050,6 +3076,8 @@ static proc_t **summary_show (void) + } + + SETw(Curwin, NEWFRAM_cwo); ++ ++ first = 1; + return p_table; + } + +diff -up procps-3.2.7/top.1.p15 procps-3.2.7/top.1 +--- procps-3.2.7/top.1.p15 2008-09-01 11:37:51.000000000 +0200 ++++ procps-3.2.7/top.1 2008-09-01 11:37:51.000000000 +0200 +@@ -1183,6 +1183,13 @@ Then ponder this: + Send bug reports to: + Albert D\. Cahalan, <albert@users.sf.net> + ++The top command calculates Cpu(s) by looking at the change in CPU time values ++between samples. When you first run it, it has no previous sample to compare ++to, so these initial values are the percentages since boot. It means you need ++at least two loops or you have to ignore summary output from the first loop. ++This is problem for example for batch mode. There is a possible workaround if ++you define the CPULOOP=1 environment variable. The top command will be run one ++extra hidden loop for CPU data before standard output. + + .\" ---------------------------------------------------------------------- + .SH 8. HISTORY Former top diff --git a/core/procps/procps-3.2.7-top-manpage.patch b/core/procps/procps-3.2.7-top-manpage.patch new file mode 100644 index 000000000..4ce077946 --- /dev/null +++ b/core/procps/procps-3.2.7-top-manpage.patch @@ -0,0 +1,32 @@ +diff -up procps-3.2.7/top.1.cpudesc procps-3.2.7/top.1 +--- procps-3.2.7/top.1.cpudesc 2008-01-18 08:04:19.000000000 +0100 ++++ procps-3.2.7/top.1 2008-01-18 08:15:49.000000000 +0100 +@@ -121,6 +121,7 @@ + 2. FIELDS / Columns + a. DESCRIPTIONS of Fields + b. SELECTING and ORDERING Columns ++ c. SUMMARY Area Fields + 3. INTERACTIVE Commands + a. GLOBAL Commands + b. SUMMARY Area Commands +@@ -540,6 +540,20 @@ You\fI move\fR a field to the\fB left\fR + upper case\fR letter and to the\fB right\fR with the\fB lower case\fR + letter. + ++.\" ...................................................................... ++.SS 2c. SUMMARY Area Fields ++.\" ---------------------------------------------------------------------- ++The summary area fields describing CPU statistics are abbreviated. They provide ++information about times spent in: ++ \fR us = user mode ++ \fR sy = system mode ++ \fR ni = low priority user mode (nice) ++ \fR id = idle task ++ \fR wa = I/O waiting ++ \fR hi = servicing IRQs ++ \fR si = servicing soft IRQs ++ \fR st = steal (time given to other DomU instances) ++ + + .\" ---------------------------------------------------------------------- + .SH 3. INTERACTIVE Commands diff --git a/core/procps/procps-3.2.7-top-remcpu.patch b/core/procps/procps-3.2.7-top-remcpu.patch new file mode 100644 index 000000000..88d14ef0a --- /dev/null +++ b/core/procps/procps-3.2.7-top-remcpu.patch @@ -0,0 +1,98 @@ +--- procps-3.2.7/top.c.remcpu 2006-07-10 10:41:11.000000000 +0200 ++++ procps-3.2.7/top.c 2006-07-10 10:41:35.000000000 +0200 +@@ -912,6 +912,7 @@ + static CPU_t *cpus_refresh (CPU_t *cpus) + { + static FILE *fp = NULL; ++ static int cpu_max; + int i; + int num; + // enough for a /proc/stat CPU line (not the intr line) +@@ -926,24 +927,29 @@ + can hold tics representing the /proc/stat cpu summary (the first + line read) -- that slot supports our View_CPUSUM toggle */ + cpus = alloc_c((1 + Cpu_tot) * sizeof(CPU_t)); ++ cpu_max = Cpu_tot; + } ++ else if (cpu_max > Cpu_tot) ++ /* move saved CUPs summary to cpu_max possition */ ++ memcpy(&cpus[cpu_max], &cpus[Cpu_tot], sizeof(CPU_t)); ++ + rewind(fp); + fflush(fp); + + // first value the last slot with the cpu summary line + if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read"); +- cpus[Cpu_tot].x = 0; // FIXME: can't tell by kernel version number +- cpus[Cpu_tot].y = 0; // FIXME: can't tell by kernel version number +- cpus[Cpu_tot].z = 0; // FIXME: can't tell by kernel version number ++ cpus[cpu_max].x = 0; // FIXME: can't tell by kernel version number ++ cpus[cpu_max].y = 0; // FIXME: can't tell by kernel version number ++ cpus[cpu_max].z = 0; // FIXME: can't tell by kernel version number + num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", +- &cpus[Cpu_tot].u, +- &cpus[Cpu_tot].n, +- &cpus[Cpu_tot].s, +- &cpus[Cpu_tot].i, +- &cpus[Cpu_tot].w, +- &cpus[Cpu_tot].x, +- &cpus[Cpu_tot].y, +- &cpus[Cpu_tot].z ++ &cpus[cpu_max].u, ++ &cpus[cpu_max].n, ++ &cpus[cpu_max].s, ++ &cpus[cpu_max].i, ++ &cpus[cpu_max].w, ++ &cpus[cpu_max].x, ++ &cpus[cpu_max].y, ++ &cpus[cpu_max].z + ); + if (num < 4) + std_err("failed /proc/stat read"); +@@ -955,7 +961,7 @@ + } + + // now value each separate cpu's tics +- for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) { ++ for (i = 0; ; i++) { + if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read"); + cpus[i].x = 0; // FIXME: can't tell by kernel version number + cpus[i].y = 0; // FIXME: can't tell by kernel version number +@@ -964,9 +970,35 @@ + &cpus[i].id, + &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z + ); +- if (num < 4) +- std_err("failed /proc/stat read"); ++ if (num < 4) { ++ Cpu_tot = i; ++ break; ++ } ++ if (i == cpu_max - 1) { ++ // Bump cpu_max and extend cpus ++ cpu_max++; ++ cpus = realloc(cpus, (1 + cpu_max) * sizeof(CPU_t)); ++ if (!cpus) std_err("realloc failed"); ++ memcpy(&cpus[cpu_max], &cpus[cpu_max-1], sizeof(CPU_t)); ++ } ++ } ++ ++ if (cpu_max > Cpu_tot) ++ memcpy(&cpus[Cpu_tot], &cpus[cpu_max], sizeof(CPU_t)); ++ ++ // and just in case we're 2.2.xx compiled without SMP support... ++ if (Cpu_tot == 1) { ++ cpus[0].id = cpus[1].id = 0; ++ cpus[0].u = cpus[1].u; ++ cpus[0].n = cpus[1].n; ++ cpus[0].s = cpus[1].s; ++ cpus[0].i = cpus[1].i; ++ cpus[0].w = cpus[1].w; ++ cpus[0].x = cpus[1].x; ++ cpus[0].y = cpus[1].y; ++ cpus[0].z = cpus[1].z; + } ++ + return cpus; + } + diff --git a/core/procps/procps-3.2.7-top-sorthigh.patch b/core/procps/procps-3.2.7-top-sorthigh.patch new file mode 100644 index 000000000..e17df1e22 --- /dev/null +++ b/core/procps/procps-3.2.7-top-sorthigh.patch @@ -0,0 +1,37 @@ +--- procps-3.2.7/top.c.sorthigh 2007-02-05 09:06:34.000000000 +0100 ++++ procps-3.2.7/top.c 2007-02-05 09:09:35.000000000 +0100 +@@ -3121,6 +3121,7 @@ + unsigned w = Fieldstab[i].width; + + int advance = (x==0) && !Rc.mode_altscr; ++ f += advance; + + switch (i) { + case P_CMD: +@@ -3179,7 +3180,7 @@ + break; + case P_PRI: + if (unlikely(-99 > p->priority) || unlikely(999 < p->priority)) { +- f = " RT"; ++ f = advance ? " RT" : " RT"; + MKCOL(""); + } else + MKCOL((int)p->priority); +@@ -3227,7 +3228,7 @@ + break; + case P_WCH: + if (No_ksyms) { +- f = " %08lx "; ++ f = advance ? "%08lx " : " %08lx "; + MKCOL((long)p->wchan); + } else { + MKCOL(lookup_wchan(p->wchan, p->XXXID)); +@@ -3236,7 +3237,7 @@ + + } /* end: switch 'procflag' */ + +- rp = scat(rp, cbuf+advance); ++ rp = scat(rp, cbuf); + } /* end: for 'maxpflgs' */ + + PUFF( diff --git a/core/procps/procps-3.2.7-w-best.patch b/core/procps/procps-3.2.7-w-best.patch new file mode 100644 index 000000000..86b3e9328 --- /dev/null +++ b/core/procps/procps-3.2.7-w-best.patch @@ -0,0 +1,16 @@ +--- procps-3.2.7/w.c.kzak 2007-04-02 23:58:30.000000000 +0200 ++++ procps-3.2.7/w.c 2007-04-03 00:09:15.000000000 +0200 +@@ -149,11 +149,11 @@ + const proc_t *restrict const tmp = *pptr; + if(unlikely(tmp->tgid == u->ut_pid)) { + *found_utpid = 1; +- best = tmp; ++ if (!best) ++ best = tmp; + } + if(tmp->tty != line) continue; + (*jcpu) += tmp->utime + tmp->stime; +- secondbest = tmp; + /* same time-logic here as for "best" below */ + if(! (secondbest && tmp->start_time <= secondbest->start_time) ){ + secondbest = tmp; diff --git a/core/procps/procps-3.2.7-watch-unicode.patch b/core/procps/procps-3.2.7-watch-unicode.patch new file mode 100644 index 000000000..1b3d97488 --- /dev/null +++ b/core/procps/procps-3.2.7-watch-unicode.patch @@ -0,0 +1,139 @@ +diff -u procps-3.2.7/Makefile procps/Makefile +--- procps-3.2.7/Makefile 2007-01-16 17:24:49.000000000 +0100 ++++ procps/Makefile 2007-01-16 17:29:27.000000000 +0100 +@@ -67,7 +67,7 @@ + # plus the top-level Makefile to make it work stand-alone. + _TARFILES := Makefile + +-CURSES := -lncurses ++CURSES := -lncursesw + + # This seems about right for the dynamic library stuff. + # Something like this is probably needed to make the SE Linux +diff -u procps-3.2.7/watch.c procps/watch.c +--- procps-3.2.7/watch.c 2007-01-16 17:24:49.000000000 +0100 ++++ procps/watch.c 2007-01-16 18:06:57.000000000 +0100 +@@ -28,6 +28,8 @@ + #include <termios.h> + #include <locale.h> + #include "proc/procps.h" ++#include <wchar.h> ++#include <wctype.h> + + #ifdef FORCE_8BIT + #undef isprint +@@ -137,6 +139,27 @@ + } + } + ++static wint_t ++readwc(FILE *stream, mbstate_t *mbs) ++{ ++ for (;;) { ++ int chr; ++ char c; ++ wchar_t wc; ++ size_t len; ++ ++ chr = getc(stream); ++ if (chr == EOF) ++ return WEOF; ++ c = chr; ++ len = mbrtowc(&wc, &c, 1, mbs); ++ if (len == (size_t)-1) ++ memset(mbs, 0, sizeof(*mbs)); ++ else if (len != (size_t)-2) ++ return wc; ++ } ++} ++ + int + main(int argc, char *argv[]) + { +@@ -243,6 +266,7 @@ + FILE *p; + int x, y; + int oldeolseen = 1; ++ mbstate_t mbs; + + if (screen_size_changed) { + get_terminal_size(); +@@ -276,49 +300,63 @@ + do_exit(2); + } + ++ memset(&mbs, 0, sizeof(mbs)); + for (y = show_title; y < height; y++) { + int eolseen = 0, tabpending = 0; + for (x = 0; x < width; x++) { +- int c = ' '; +- int attr = 0; ++ wint_t c = L' '; ++ int attr = 0, c_width; ++ cchar_t cc; ++ wchar_t wstr[2]; + + if (!eolseen) { + /* if there is a tab pending, just spit spaces until the + next stop instead of reading characters */ + if (!tabpending) + do +- c = getc(p); +- while (c != EOF && !isprint(c) +- && c != '\n' +- && c != '\t'); +- if (c == '\n') ++ c = readwc(p, &mbs); ++ while (c != WEOF && !iswprint(c) ++ && c != L'\n' ++ && c != L'\t'); ++ if (c == L'\n') + if (!oldeolseen && x == 0) { + x = -1; + continue; + } else + eolseen = 1; +- else if (c == '\t') ++ else if (c == L'\t') + tabpending = 1; +- if (c == EOF || c == '\n' || c == '\t') +- c = ' '; ++ if (c == WEOF || c == L'\n' || c == L'\t') ++ c = L' '; + if (tabpending && (((x + 1) % 8) == 0)) + tabpending = 0; + } ++ wstr[0] = c; ++ wstr[1] = 0; ++ setcchar (&cc, wstr, 0, 0, NULL); + move(y, x); + if (option_differences) { +- chtype oldch = inch(); +- char oldc = oldch & A_CHARTEXT; ++ cchar_t oldc; ++ wchar_t oldwstr[2]; ++ attr_t attrs; ++ short colors; ++ ++ in_wch(&oldc); ++ getcchar(&oldc, oldwstr, &attrs, &colors, NULL); + attr = !first_screen +- && ((char)c != oldc ++ && (wstr[0] != oldwstr[0] + || + (option_differences_cumulative +- && (oldch & A_ATTRIBUTES))); ++ && attrs)); + } + if (attr) + standout(); +- addch(c); ++ add_wch(&cc); + if (attr) + standend(); ++ c_width = wcwidth(c); ++ if (c_width > 1) ++ x += c_width - 1; + } + oldeolseen = eolseen; + } diff --git a/core/procps/procps-3.2.8+gmake-3.82.patch b/core/procps/procps-3.2.8+gmake-3.82.patch new file mode 100644 index 000000000..87ab13ea4 --- /dev/null +++ b/core/procps/procps-3.2.8+gmake-3.82.patch @@ -0,0 +1,14 @@ +Index: procps-3.2.8/Makefile +=================================================================== +--- procps-3.2.8.orig/Makefile ++++ procps-3.2.8/Makefile +@@ -174,7 +174,8 @@ INSTALL := $(BINFILES) $(MANFILES) + # want this rule first, use := on ALL, and ALL not filled in yet + all: do_all + +--include */module.mk ++-include proc/module.mk ++-include ps/module.mk + + do_all: $(ALL) + diff --git a/core/procps/procps-3.2.8-linux-ver-init.patch b/core/procps/procps-3.2.8-linux-ver-init.patch new file mode 100644 index 000000000..6d4039c91 --- /dev/null +++ b/core/procps/procps-3.2.8-linux-ver-init.patch @@ -0,0 +1,23 @@ +https://bugs.gentoo.org/303120 + +make sure the linux version constructor runs before the libproc constructor +since the latter uses variables setup by the former + +fix by Chris Coleman + +Index: proc/version.c +=================================================================== +RCS file: /cvsroot/procps/procps/proc/version.c,v +retrieving revision 1.7 +diff -u -p -r1.7 version.c +--- proc/version.c 9 Feb 2003 07:27:16 -0000 1.7 ++++ proc/version.c 14 Nov 2010 00:22:44 -0000 +@@ -33,7 +33,7 @@ void display_version(void) { + + int linux_version_code; + +-static void init_Linux_version(void) __attribute__((constructor)); ++static void init_Linux_version(void) __attribute__((constructor(100))); + static void init_Linux_version(void) { + static struct utsname uts; + int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */ diff --git a/core/procps/procps-3.2.8-setlocale.patch b/core/procps/procps-3.2.8-setlocale.patch new file mode 100644 index 000000000..c197fd38a --- /dev/null +++ b/core/procps/procps-3.2.8-setlocale.patch @@ -0,0 +1,66 @@ +diff -Nur procps-3.2.8-orig/proc/sysinfo.c procps-3.2.8/proc/sysinfo.c +--- procps-3.2.8-orig/proc/sysinfo.c 2008-03-24 05:33:43.000000000 +0100 ++++ procps-3.2.8/proc/sysinfo.c 2009-12-18 22:50:52.000000000 +0100 +@@ -74,17 +74,19 @@ + /***********************************************************************/ + int uptime(double *restrict uptime_secs, double *restrict idle_secs) { + double up=0, idle=0; +- char *restrict savelocale; ++ char *savelocale; + + FILE_TO_BUF(UPTIME_FILE,uptime_fd); +- savelocale = setlocale(LC_NUMERIC, NULL); ++ savelocale = strdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC,"C"); + if (sscanf(buf, "%lf %lf", &up, &idle) < 2) { + setlocale(LC_NUMERIC,savelocale); ++ free(savelocale); + fputs("bad data in " UPTIME_FILE "\n", stderr); + return 0; + } + setlocale(LC_NUMERIC,savelocale); ++ free(savelocale); + SET_IF_DESIRED(uptime_secs, up); + SET_IF_DESIRED(idle_secs, idle); + return up; /* assume never be zero seconds in practice */ +@@ -128,9 +130,9 @@ + double up_1, up_2, seconds; + unsigned long long jiffies; + unsigned h; +- char *restrict savelocale; ++ char *savelocale; + +- savelocale = setlocale(LC_NUMERIC, NULL); ++ savelocale = strdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC, "C"); + do{ + FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_1); +@@ -141,6 +143,7 @@ + /* uptime(&up_2, NULL); */ + } while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */ + setlocale(LC_NUMERIC, savelocale); ++ free(savelocale); + jiffies = user_j + nice_j + sys_j + other_j; + seconds = (up_1 + up_2) / 2; + h = (unsigned)( (double)jiffies/seconds/smp_num_cpus ); +@@ -303,16 +306,18 @@ + /***********************************************************************/ + void loadavg(double *restrict av1, double *restrict av5, double *restrict av15) { + double avg_1=0, avg_5=0, avg_15=0; +- char *restrict savelocale; ++ char *savelocale; + + FILE_TO_BUF(LOADAVG_FILE,loadavg_fd); +- savelocale = setlocale(LC_NUMERIC, NULL); ++ savelocale = strdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC, "C"); + if (sscanf(buf, "%lf %lf %lf", &avg_1, &avg_5, &avg_15) < 3) { + fputs("bad data in " LOADAVG_FILE "\n", stderr); ++ free(savelocale); + exit(1); + } + setlocale(LC_NUMERIC, savelocale); ++ free(savelocale); + SET_IF_DESIRED(av1, avg_1); + SET_IF_DESIRED(av5, avg_5); + SET_IF_DESIRED(av15, avg_15); diff --git a/core/procps/procps-3.2.8-threads.patch b/core/procps/procps-3.2.8-threads.patch new file mode 100644 index 000000000..2491aa4c0 --- /dev/null +++ b/core/procps/procps-3.2.8-threads.patch @@ -0,0 +1,49 @@ +diff -up procps-3.2.8/top.c.threads procps-3.2.8/top.c +--- procps-3.2.8/top.c.threads 2009-10-01 07:14:43.000000000 -0400 ++++ procps-3.2.8/top.c 2009-10-05 14:05:00.000000000 -0400 +@@ -1138,6 +1138,7 @@ static proc_t **procs_refresh (proc_t ** + #define ENTsz sizeof(proc_t) + static unsigned savmax = 0; // first time, Bypass: (i) + proc_t *ptsk = (proc_t *)-1; // first time, Force: (ii) ++ proc_t *saved_ptsk; + unsigned curmax = 0; // every time (jeeze) + PROCTAB* PT; + static int show_threads_was_enabled = 0; // optimization +@@ -1172,6 +1173,10 @@ static proc_t **procs_refresh (proc_t ** + while (curmax < savmax) { + proc_t *ttsk; + if (unlikely(!(ptsk = readproc(PT, NULL)))) break; ++ if(!show_threads_was_enabled) ++ saved_ptsk = ptsk; ++ else ++ saved_ptsk = NULL; + show_threads_was_enabled = 1; + while (curmax < savmax) { + unsigned idx; +@@ -1189,7 +1194,7 @@ static proc_t **procs_refresh (proc_t ** + prochlp(ttsk); + ++curmax; + } +- free(ptsk); // readproc() proc_t not used ++ if(!saved_ptsk) free(ptsk); // readproc() proc_t not used + } + } + +@@ -1208,7 +1213,8 @@ static proc_t **procs_refresh (proc_t ** + else { // show each thread in a process separately + while (ptsk) { + proc_t *ttsk; +- if (likely(ptsk = readproc(PT, NULL))) { ++ if (likely(ptsk = readproc(PT, NULL)) || ++ unlikely(saved_ptsk && (ptsk = saved_ptsk)) ) { + show_threads_was_enabled = 1; + while (1) { + table = alloc_r(table, (curmax + 1) * PTRsz); +@@ -1216,6 +1222,7 @@ static proc_t **procs_refresh (proc_t ** + prochlp(ttsk); + table[curmax++] = ttsk; + } ++ saved_ptsk = NULL; + free(ptsk); // readproc() proc_t not used + } + } diff --git a/core/procps/sysctl.conf b/core/procps/sysctl.conf new file mode 100644 index 000000000..e3ebc7bad --- /dev/null +++ b/core/procps/sysctl.conf @@ -0,0 +1,13 @@ +# +# Kernel sysctl configuration +# + +# Disable packet forwarding +net.ipv4.ip_forward=0 + +# Disable the magic-sysrq key (console security issues) +kernel.sysrq = 0 + +# Enable TCP SYN Cookie Protection +net.ipv4.tcp_syncookies = 1 + |