Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [git commit] package/dvb-apps: fix downloading
From: Peter Korsgaard @ 2013-01-01 14:33 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=a24479144fb71a1c6a6b6fb16799cc83f49be56c
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

As we're using the sources from the Mercurial repository, and Buildroot
does support retrieving from a Mercurial repository, there is no need
to try (and fail1) getting the archive from the Mercurial built-in
tarball mechanism.

(Note: I was beaten by this because I had a cached copy locally, left
after the previous tvheadend-vampirises-files-from-toher-packages attempt,
that I forgot to delete before testing. Ouch...)

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/dvb-apps/dvb-apps.mk |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/dvb-apps/dvb-apps.mk b/package/dvb-apps/dvb-apps.mk
index 721fbf0..5db8148 100644
--- a/package/dvb-apps/dvb-apps.mk
+++ b/package/dvb-apps/dvb-apps.mk
@@ -5,8 +5,8 @@
 #############################################################
 
 DVB_APPS_VERSION        = 3fc7dfa68484
-DVB_APPS_SOURCE         = dvb-apps-$(DVB_APPS_VERSION).tar.bz2
-DVB_APPS_SITE           = http://linuxtv.org/hg/dvb-apps/archive/
+DVB_APPS_SITE           = http://linuxtv.org/hg/dvb-apps
+DVB_APPS_SITE_METHOD    = hg
 
 # We just install the transponders data. As this is not a 'work' as per
 # traditional copyright, but just a collection of 'facts', there's probably

^ permalink raw reply related

* [Buildroot] [git commit] efl/libecore: fix build with gcrypt
From: Peter Korsgaard @ 2013-01-01 14:34 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=560e7db37433fc82760f71557dbc3e495f05f909
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

When building with gnutls, libecore also needs libgcrypt.

Fixes:

  http://autobuild.buildroot.org/results/4da454d6414cf8f4e638defae9b793fb46a0a072/build-end.log

While we're at it, also explicit the --enable-openssl /
--disable-openssl depending on whether openssl is available or not.

[Peter: only enable gnutls support when both gnutls and gcrypt are enabled]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/efl/libecore/libecore.mk |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/package/efl/libecore/libecore.mk b/package/efl/libecore/libecore.mk
index 0220017..dfc5750 100644
--- a/package/efl/libecore/libecore.mk
+++ b/package/efl/libecore/libecore.mk
@@ -36,10 +36,16 @@ endif
 
 ifeq ($(BR2_PACKAGE_OPENSSL),y)
 LIBECORE_DEPENDENCIES += openssl
+LIBECORE_CONF_OPT += --enable-openssl
+else
+LIBECORE_CONF_OPT += --disable-openssl
 endif
 
-ifeq ($(BR2_PACKAGE_GNUTLS),y)
-LIBECORE_DEPENDENCIES += gnutls
+ifeq ($(BR2_PACKAGE_GNUTLS)$(BR2_PACKAGE_LIBGCRYPT),yy)
+LIBECORE_DEPENDENCIES += gnutls libgcrypt
+LIBECORE_CONF_OPT += --enable-gnutls --with-libgcrypt-prefix=$(STAGING_DIR)/usr
+else
+LIBECORE_CONF_OPT += --disable-gnutls
 endif
 
 ifeq ($(BR2_PACKAGE_LIBCURL),y)

^ permalink raw reply related

* [Buildroot] [PATCH] efl/libecore: fix build with gcrypt
From: Peter Korsgaard @ 2013-01-01 14:36 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <1357046638-2195-1-git-send-email-thomas.petazzoni@free-electrons.com>

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> When building with gnutls, libecore also needs libgcrypt.
 Thomas> Fixes:

 Thomas>   http://autobuild.buildroot.org/results/4da454d6414cf8f4e638defae9b793fb46a0a072/build-end.log

 Thomas> While we're at it, also explicit the --enable-openssl /
 Thomas> --disable-openssl depending on whether openssl is available or not.

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  package/efl/libecore/libecore.mk |    8 +++++++-
 Thomas>  1 file changed, 7 insertions(+), 1 deletion(-)

 Thomas> diff --git a/package/efl/libecore/libecore.mk b/package/efl/libecore/libecore.mk
 Thomas> index 0220017..e824bfa 100644
 Thomas> --- a/package/efl/libecore/libecore.mk
 Thomas> +++ b/package/efl/libecore/libecore.mk
 Thomas> @@ -36,10 +36,16 @@ endif
 
 Thomas>  ifeq ($(BR2_PACKAGE_OPENSSL),y)
 Thomas>  LIBECORE_DEPENDENCIES += openssl
 Thomas> +LIBECORE_CONF_OPT += --enable-openssl
 Thomas> +else
 Thomas> +LIBECORE_CONF_OPT += --disable-openssl
 Thomas>  endif
 
 Thomas>  ifeq ($(BR2_PACKAGE_GNUTLS),y)
 Thomas> -LIBECORE_DEPENDENCIES += gnutls
 Thomas> +LIBECORE_DEPENDENCIES += gnutls libgcrypt

No, we shouldn't pull in dependencies behind the users' back. I've
changed it to only activate when both gnutls and libgcrypt are present.

Committed with that change, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [PATCH] package/dvb-apps: fix downloading
From: Peter Korsgaard @ 2013-01-01 14:36 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <1356954095-21337-1-git-send-email-yann.morin.1998@free.fr>

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 Yann> As we're using the sources from the Mercurial repository, and Buildroot
 Yann> does support retrieving from a Mercurial repository, there is no need
 Yann> to try (and fail1) getting the archive from the Mercurial built-in
 Yann> tarball mechanism.

 Yann> (Note: I was beaten by this because I had a cached copy locally, left
 Yann> after the previous tvheadend-vampirises-files-from-toher-packages attempt,
 Yann> that I forgot to delete before testing. Ouch...)

Committed, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [PATCH] efl/libecore: fix build with gcrypt
From: Thomas Petazzoni @ 2013-01-01 14:56 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <87wqvxrmvk.fsf@dell.be.48ers.dk>

Dear Peter Korsgaard,

On Tue, 01 Jan 2013 15:36:31 +0100, Peter Korsgaard wrote:

> No, we shouldn't pull in dependencies behind the users' back. I've
> changed it to only activate when both gnutls and libgcrypt are present.
> 
> Committed with that change, thanks.

Ack, thanks!

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply

* [Buildroot] [PATCH 1/3] system/skeleton: add the shadow-group file
From: Yann E. MORIN @ 2013-01-01 15:36 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <20130101102606.258d780e@skate>

Thomas, All,

On Tuesday 01 January 2013 Thomas Petazzoni wrote:
> On Mon, 31 Dec 2012 19:18:08 +0100, Yann E. MORIN wrote:
> > Wrong. Groups can have passwords. And users can change-group with:
[--SNIP--]
> The next question that comes up is: do we really need to support this
> in Buildroot?

Well, I interpreted the abscence of that file as an oversight, that's why
I thought of adding it.

Right, we probably do not need the change-group feature in buildroot.
However, for the sake of consistency, I think it is good to have gshadow.

But I can very well live without it, sure.

Anyway... Happy New Year to all! :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply

* [Buildroot] [PATCH] package/tvheadend: does not reqquire wordexp
From: Yann E. MORIN @ 2013-01-01 16:49 UTC (permalink / raw)
  To: buildroot

Builds just fine without it (probably stray include?)

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/tvheadend/tvheadend-no-wordexp.patch |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)
 create mode 100644 package/tvheadend/tvheadend-no-wordexp.patch

diff --git a/package/tvheadend/tvheadend-no-wordexp.patch b/package/tvheadend/tvheadend-no-wordexp.patch
new file mode 100644
index 0000000..ae290ed
--- /dev/null
+++ b/package/tvheadend/tvheadend-no-wordexp.patch
@@ -0,0 +1,20 @@
+epggrab: do not include wordexp.h
+
+Nothing from wordexp.h is needed (stray include?)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+---
+Patch sent upstream, but no mailing-list. :-(
+Status: awaiting feedback.
+
+diff -durN tvheadend-v3.3.orig/src/epggrab.c tvheadend-v3.3/src/epggrab.c
+--- tvheadend-v3.3.orig/src/epggrab.c	2012-09-25 15:32:31.000000000 +0200
++++ tvheadend-v3.3/src/epggrab.c	2012-12-31 19:22:29.768431849 +0100
+@@ -20,7 +20,6 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <assert.h>
+-#include <wordexp.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/un.h>
-- 
1.7.2.5

^ permalink raw reply related

* [Buildroot] [pull request] Pull request for branch yem-package-create-user
From: Yann E. MORIN @ 2013-01-01 20:10 UTC (permalink / raw)
  To: buildroot

Hello All!

Here is a series that allows packages to create users.

Packages that install daemons may well want to run those daemons as
non-root users to avoid security issues. Currently, there are two users
of choice to run 'generic' daemons: root or daemon (although there are
a few dedicated users to run a few services: mail, sshd, ftp...).

This series builds upon both the package infrastrucutre to define the
user(s) a package may want to create, and the filesystem infrastructure
to actually generate these users, and chown their ${HOME}s.

Documentation is updated accordingly.

Note: for now, users' passwords are md5-encrypted. Once the pending
change to introduce alternative password-encryption schemes is applied,
we can use that to encode users' passwords, too.

As a proof of concept, the package tvheadend has been updated to use
a dedicated user to run its daemon as (call me stubborn! ;-] ).

Changes v1 -. v2:
  - drop the gshadow patch (Thomas)
  - tvheadend user is now part of the video secondary group


The following changes since commit 560e7db37433fc82760f71557dbc3e495f05f909:

  efl/libecore: fix build with gcrypt (2013-01-01 15:34:40 +0100)

are available in the git repository at:
  git://gitorious.org/buildroot/buildroot.git yem-package-create-user

Yann E. MORIN (2):
      packages: add ability for packages to create users
      package/tvheadend: use a non-root user to run the daemon

 docs/manual/adding-packages-generic.txt |   16 ++-
 docs/manual/makedev-syntax.txt          |   65 ++++++
 fs/common.mk                            |    5 +-
 package/pkg-generic.mk                  |    1 +
 package/tvheadend/etc.default.tvheadend |    5 +-
 package/tvheadend/tvheadend.mk          |   10 +-
 support/scripts/mkusers                 |  348 +++++++++++++++++++++++++++++++
 7 files changed, 442 insertions(+), 8 deletions(-)
 create mode 100755 support/scripts/mkusers

Regards,
Yann E. MORIN

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply

* [Buildroot] [PATCH 1/2] packages: add ability for packages to create users
From: Yann E. MORIN @ 2013-01-01 20:10 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <cover.1357070939.git.yann.morin.1998@free.fr>

Packages that install daemons may need those daemons to run as a non-root,
or an otherwise non-system (eg. 'daemon'), user.

Add infrastructure for packages to create users, by declaring the
FOO_USERS variable that conatin a makedev-syntax-like description
of the user(s) to add.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 docs/manual/adding-packages-generic.txt |   16 ++-
 docs/manual/makedev-syntax.txt          |   65 ++++++
 fs/common.mk                            |    5 +-
 package/pkg-generic.mk                  |    1 +
 support/scripts/mkusers                 |  348 +++++++++++++++++++++++++++++++
 5 files changed, 432 insertions(+), 3 deletions(-)
 create mode 100755 support/scripts/mkusers

diff --git a/docs/manual/adding-packages-generic.txt b/docs/manual/adding-packages-generic.txt
index 0759d4f..1adf424 100644
--- a/docs/manual/adding-packages-generic.txt
+++ b/docs/manual/adding-packages-generic.txt
@@ -50,7 +50,11 @@ system is based on hand-written Makefiles or shell scripts.
 34:	/bin/foo  f  4755  0  0	 -  -  -  -  -
 35: endef
 36:
-37: $(eval $(generic-package))
+37: define LIBFOO_USERS
+38: foo -1 libfoo -1 * - - - LibFoo daemon
+39: endef
+40
+41: $(eval $(generic-package))
 --------------------------------
 
 The Makefile begins on line 6 to 10 with metadata information: the
@@ -95,7 +99,10 @@ On line 29..31, we define a device-node file used by this package
 On line 33..35, we define the permissions to set to specific files
 installed by this package (+LIBFOO_PERMISSIONS+).
 
-Finally, on line 37, we call the +generic-package+ function, which
+On lines 37..39, we define a user that is used by this package (eg.
+to run a daemon as non-root).
+
+Finally, on line 41, we call the +generic-package+ function, which
 generates, according to the variables defined previously, all the
 Makefile code necessary to make your package working.
 
@@ -252,6 +259,11 @@ information is (assuming the package name is +libfoo+) :
   You can find some documentation for this syntax in the xref:makedev-syntax[].
   This variable is optional.
 
+* +LIBFOO_USERS+ lists the users to create for this package, if it installs
+  a daemon you want to run with a specific user. The syntax is similar in
+  spirit to the makedevs one, and is described in the xref:makeuser-syntax[].
+  This variable is optional.
+
 * +LIBFOO_LICENSE+ defines the license (or licenses) under which the package
   is released.
   This name will appear in the manifest file produced by +make legal-info+.
diff --git a/docs/manual/makedev-syntax.txt b/docs/manual/makedev-syntax.txt
index 27517b3..fffdac9 100644
--- a/docs/manual/makedev-syntax.txt
+++ b/docs/manual/makedev-syntax.txt
@@ -54,3 +54,68 @@ and then for device files corresponding to the partitions of
 /dev/hda	b	640	0	0	3	1	1	1	15
 -------------------------------------------------------------------
 
+
+[[makeuser-syntax]]
+Makeuser syntax documentation
+-----------------------------
+
+The syntax to create users is inspired by the makedev syntax, above, but
+is psecific to buildroot.
+
+The syntax for adding a user is a space-separated list of fields, one
+user per-line; the fields are:
+
+|=================================================================
+|username |uid |group |gid |password |home |shell |groups |comment
+|=================================================================
+
+Where:
+
+- +username+ is the desired user name (aka login name) for the user.
+  It must be unique.
+- +uid+ is the desired UID for the user. It must be unique, and not
+  +0+. If set to +-1+, then a unique UID will be computed by buildroot.
+- +group+ is the desired name for the user's main group.
+- +gid+ is the desired GID for the user's main group. It must be unique,
+  and not +0+. If set to +-1+, then a unique GID will be computed by
+  buildroot.
+- +password+ is the crypt(3)-encrypted password. If prefixed with +=+,
+  then it is interpreted as clear-text, and will be cypt-encoded. If
+  prefixed with +!+, then login is disabled. If set to +*+, then login
+  is not allowed.
+- +home+ is the desired home directory for the user. If set to '-', no
+  home directory will be created, and the user's home will be +/+.
+  Explicitly setting +home+ to +/+ is not allowed.
+- +shell+ is the desired shell for the user. If set to +-+, then
+  +/bin/false+ is set as the user's shell.
+- +groups+ is the comma-separated list of additional groups the user
+  should be part of. If set to +-+, then the user will be a member of
+  no additional group.
+- +comment+ is an almost-free-form text.
+
+There are a few restrictions on the content of each field:
+
+* except for +comment+, all fields are mandatory.
+* except for +comment+, fields may not contain spaces.
+* no field may contain a column (+:+).
+
+If +home+ is not +-+, then the home directory, and all files below,
+will belong to the user and its main group.
+
+Example:
+
+----
+foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user
+----
+
+This will create this user:
+
+- +username+ (aka login name) is: +foo+
+- +uid+ is computed by buildroot
+- main +group+ is: +bar+
+- main group +gid+ is computed by buildroot
+- clear-text +password+ is: +blabla+, will be crypt(3)-encrypted, but login is disabled.
+- +home+ is: +/home/foo+
+- +shell+ is: +/bin/sh+
+- +foo+ is also a member of +groups+: +alpha+ and +bravo+
+- +comment+ is: +Foo user+
diff --git a/fs/common.mk b/fs/common.mk
index b1512dd..b5a7950 100644
--- a/fs/common.mk
+++ b/fs/common.mk
@@ -35,6 +35,7 @@ FAKEROOT_SCRIPT = $(BUILD_DIR)/_fakeroot.fs
 FULL_DEVICE_TABLE = $(BUILD_DIR)/_device_table.txt
 ROOTFS_DEVICE_TABLES = $(call qstrip,$(BR2_ROOTFS_DEVICE_TABLE)) \
 	$(call qstrip,$(BR2_ROOTFS_STATIC_DEVICE_TABLE))
+USERS_TABLE = $(BUILD_DIR)/_users_table.txt
 
 define ROOTFS_TARGET_INTERNAL
 
@@ -55,11 +56,13 @@ endif
 	printf '$(subst $(sep),\n,$(PACKAGES_PERMISSIONS_TABLE))' >> $(FULL_DEVICE_TABLE)
 	echo "$(HOST_DIR)/usr/bin/makedevs -d $(FULL_DEVICE_TABLE) $(TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
 endif
+	printf '$(subst $(sep),\n,$(PACKAGES_USERS))' > $(USERS_TABLE)
+	$(TOPDIR)/support/scripts/mkusers $(USERS_TABLE) $(TARGET_DIR) >> $(FAKEROOT_SCRIPT)
 	echo "$(ROOTFS_$(2)_CMD)" >> $(FAKEROOT_SCRIPT)
 	chmod a+x $(FAKEROOT_SCRIPT)
 	$(HOST_DIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)
 	cp support/misc/target-dir-warning.txt $(TARGET_DIR_WARNING_FILE)
-	- at rm -f $(FAKEROOT_SCRIPT) $(FULL_DEVICE_TABLE)
+	- at rm -f $(FAKEROOT_SCRIPT) $(FULL_DEVICE_TABLE) $(USERS_TABLE)
 	$(foreach hook,$(ROOTFS_$(2)_POST_GEN_HOOKS),$(call $(hook))$(sep))
 ifeq ($$(BR2_TARGET_ROOTFS_$(2)_GZIP),y)
 	gzip -9 -c $$@ > $$@.gz
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index a570ad7..871544c 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -510,6 +510,7 @@ ifeq ($$($$($(2)_KCONFIG_VAR)),y)
 TARGETS += $(1)
 PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep)
 PACKAGES_DEVICES_TABLE += $$($(2)_DEVICES)$$(sep)
+PACKAGES_USERS += $$($(2)_USERS)$$(sep)
 
 ifeq ($$($(2)_SITE_METHOD),svn)
 DL_TOOLS_DEPENDENCIES += svn
diff --git a/support/scripts/mkusers b/support/scripts/mkusers
new file mode 100755
index 0000000..9d89ff9
--- /dev/null
+++ b/support/scripts/mkusers
@@ -0,0 +1,348 @@
+#!/bin/bash
+set -e
+myname="${0##*/}"
+
+#----------------------------------------------------------------------------
+# Configurable items
+MIN_UID=1000
+MAX_UID=1999
+MIN_GID=1000
+MAX_GID=1999
+# No more is configurable below this point
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+USERS_TABLE="${1}"
+TARGET_DIR="${2}"
+shift 2
+PASSWD="${TARGET_DIR}/etc/passwd"
+SHADOW="${TARGET_DIR}/etc/shadow"
+GROUP="${TARGET_DIR}/etc/group"
+# /etc/gsahdow is not part of the standard skeleton, so not everybody
+# will have it, but some may hav it, and its content must be in sync
+# with /etc/group, so any use of gshadow must be conditional.
+GSHADOW="${TARGET_DIR}/etc/gshadow"
+
+#----------------------------------------------------------------------------
+error() {
+    local fmt="${1}"
+    shift
+
+    printf "%s: " "${myname}" >&2
+    printf "${fmt}" "${@}" >&2
+}
+fail() {
+    error "$@"
+    exit 1
+}
+
+#----------------------------------------------------------------------------
+get_uid() {
+    local username="${1}"
+
+    grep -r -E "${username}:" "${PASSWD}" |cut -d: -f3
+}
+
+#----------------------------------------------------------------------------
+get_ugid() {
+    local username="${1}"
+
+    grep -r -E "${username}:" "${PASSWD}" |cut -d: -f4
+}
+
+#----------------------------------------------------------------------------
+get_gid() {
+    local group="${1}"
+
+    grep -r -E "${group}:" "${GROUP}" |cut -d: -f3
+}
+
+#----------------------------------------------------------------------------
+get_username() {
+    local uid="${1}"
+
+    sed -r -e '/^([^:]+):[^:]+:'"${uid}"':.*/!d; s//\1/;' "${PASSWD}"
+}
+
+#----------------------------------------------------------------------------
+get_group() {
+    local gid="${1}"
+
+    sed -r -e '/^([^:]+):[^:]+:'"${gid}"':/!d; s//\1/;' "${GROUP}"
+}
+
+#----------------------------------------------------------------------------
+get_ugroup() {
+    local username="${1}"
+    local ugid
+
+    ugid="$( get_ugid "${username}" )"
+    if [ -n "${ugid}" ]; then
+        get_group "${ugid}"
+    fi
+}
+
+#----------------------------------------------------------------------------
+# Sanity-check the new user/group:
+#   - check the gid is not already used for another group
+#   - check the group does not already exist with another gid
+#   - check the user does not already exist with another gid
+#   - check the uid is not already used for another user
+#   - check the user does not already exist with another uid
+#   - check the user does not already exist in another group
+check_user_validity() {
+    local username="${1}"
+    local uid="${2}"
+    local group="${3}"
+    local gid="${4}"
+    local _uid _ugid _gid _username _group _ugroup
+
+    _group="$( get_group "${gid}" )"
+    _gid="$( get_gid "${group}" )"
+    _ugid="$( get_ugid "${username}" )"
+    _username="$( get_username "${uid}" )"
+    _uid="$( get_uid "${username}" )"
+    _ugroup="$( get_ugroup "${username}" )"
+
+    if [ ${gid} -ge 0 ]; then
+        # check the gid is not already used for another group
+        if [ -n "${_group}" -a "${_group}" != "${group}" ]; then
+            fail "gid is already used by group '${_group}'\n"
+        fi
+
+        # check the group does not already exists with another gid
+        if [ -n "${_gid}" -a ${_gid} -ne ${gid} ]; then
+            fail "group already exists with gid '${_gid}'\n"
+        fi
+
+        # check the user does not already exists with another gid
+        if [ -n "${_ugid}" -a ${_ugid} -ne ${gid} ]; then
+            fail "user already exists with gid '${_ugid}'\n"
+        fi
+    fi
+
+    if [ ${uid} -ge 0 ]; then
+        # check the uid is not already used for another user
+        if [ -n "${_username}" -a "${_username}" != "${username}" ]; then
+            fail "uid is already used by user '${_username}'\n"
+        fi
+
+        # check the user does not already exists with another uid
+        if [ -n "${_uid}" -a ${_uid} -ne ${uid} ]; then
+            fail "user already exists with uid '${_uid}'\n"
+        fi
+    fi
+
+    # check the user does not already exist in another group
+    if [ -n "${_ugroup}" -a "${_ugroup}" != "${group}" ]; then
+        fail "user already exists with group '${_ugroup}'\n"
+    fi
+
+    return 0
+}
+
+#----------------------------------------------------------------------------
+# Generate a unique GID for given group. If the group already exists,
+# then simply report its current GID. Otherwise, generate the lowest GID
+# that is:
+#   - not 0
+#   - comprised in [MIN_GID..MAX_GID]
+#   - not already used by a group
+generate_gid() {
+    local group="${1}"
+    local gid
+
+    gid="$( get_gid "${group}" )"
+    if [ -z "${gid}" ]; then
+        for(( gid=MIN_GID; gid<=MAX_GID; gid++ )); do
+            if [ -z "$( get_group "${gid}" )" ]; then
+                break
+            fi
+        done
+        if [ ${gid} -gt ${MAX_GID} ]; then
+            fail "can not allocate a GID for group '%s'\n" "${group}"
+        fi
+    fi
+    printf "%d\n" "${gid}"
+}
+
+#----------------------------------------------------------------------------
+# Add a group; if it does already exist, remove it first
+add_one_group() {
+    local group="${1}"
+    local gid="${2}"
+    local _f
+
+    # Generate a new GID if needed
+    if [ ${gid} -eq -1 ]; then
+        gid="$( generate_gid "${group}" )"
+    fi
+
+    # Remove any previous instance of this group
+    for _f in "${GROUP}" "${GSHADOW}"; do
+        [ -f "${_f}" ] || continue
+        sed -r -i -e '/^'"${group}"':.*/d;' "${_f}"
+    done
+
+    printf "%s:x:%d:\n" "${group}" "${gid}" >>"${GROUP}"
+    if [ -f "${GSHADOW}" ]; then
+        printf "%s:*::\n" "${group}" >>"${GSHADOW}"
+    fi
+}
+
+#----------------------------------------------------------------------------
+# Generate a unique UID for given username. If the username already exists,
+# then simply report its current UID. Otherwise, generate the lowest UID
+# that is:
+#   - not 0
+#   - comprised in [MIN_UID..MAX_UID]
+#   - not already used by a user
+generate_uid() {
+    local username="${1}"
+    local uid
+
+    uid="$( get_uid "${username}" )"
+    if [ -z "${uid}" ]; then
+        for(( uid=MIN_UID; uid<=MAX_UID; uid++ )); do
+            if [ -z "$( get_username "${uid}" )" ]; then
+                break
+            fi
+        done
+        if [ ${uid} -gt ${MAX_UID} ]; then
+            fail "can not allocate a UID for user '%s'\n" "${username}"
+        fi
+    fi
+    printf "%d\n" "${uid}"
+}
+
+#----------------------------------------------------------------------------
+# Add given user to given group, if not already the case
+add_user_to_group() {
+    local username="${1}"
+    local group="${2}"
+    local _f
+
+    for _f in "${GROUP}" "${GSHADOW}"; do
+        [ -f "${_f}" ] || continue
+        sed -r -i -e 's/^('"${group}"':.*:)(([^:]+,)?)'"${username}"'(,[^:]+*)?$/\1\2\4/;'  \
+                  -e 's/^('"${group}"':.*)$/\1,'"${username}"'/;'                           \
+                  -e 's/,+/,/'                                                              \
+                  -e 's/:,/:/'                                                              \
+                  "${_f}"
+    done
+}
+
+#----------------------------------------------------------------------------
+# Add a user; if it does already exist, remove it first
+add_one_user() {
+    local username="${1}"
+    local uid="${2}"
+    local group="${3}"
+    local gid="${4}"
+    local passwd="${5}"
+    local home="${6}"
+    local shell="${7}"
+    local groups="${8}"
+    local comment="${9}"
+    local nb_days="$((($(date +%s)+(24*60*60-1))/(24*60*60)))"
+    local _f _group _home _shell _gid _passwd
+
+    # First, sanity-check the user
+    check_user_validity "${username}" "${uid}" "${group}" "${gid}"
+
+    # Generate a new UID if needed
+    if [ ${uid} -eq -1 ]; then
+        uid="$( generate_uid "${username}" )"
+    fi
+
+    # Remove any previous instance of this user
+    for _f in "${PASSWD}" "${SHADOW}"; do
+        sed -r -i -e '/^'"${username}"':.*/d;' "${_f}"
+    done
+
+    _gid="$( get_gid "${group}" )"
+    _shell="${shell}"
+    if [ "${shell}" = "-" ]; then
+        _shell="/bin/false"
+    fi
+    case "${home}" in
+        -)  _home="/";;
+        /)  fail "home can not be explicitly '/'\n";;
+        /*) _home="${home}";;
+        *)  fail "home must be an absolute path";;
+    esac
+    case "${passwd}" in
+        =!*|!=*)
+            _passwd='!'"$( mkpasswd -m md5 "${passwd#??}" )"
+            ;;
+        =*)
+            _passwd="$( mkpasswd -m md5 "${passwd#?}" )"
+            ;;
+        *)
+            _passwd="${passwd}"
+            ;;
+    esac
+
+    printf "%s:x:%d:%d:%s:%s:%s\n"              \
+           "${username}" "${uid}" "${_gid}"     \
+           "${comment}" "${_home}" "${_shell}"  \
+           >>"${PASSWD}"
+    printf "%s:%s:%d:0:99999:7:::\n"                \
+           "${username}" "${_passwd}" "${nb_days}"  \
+           >>"${SHADOW}"
+
+    # Add the user to its additional groups
+    if [ "${groups}" != "-" ]; then
+        for _group in ${groups//,/ }; do
+            add_user_to_group "${username}" "${_group}"
+        done
+    fi
+
+    # If the user has a home, chown it
+    # (Note: stdout goes to the fakeroot-script)
+    if [ "${home}" != "-" ]; then
+        mkdir -p "${TARGET_DIR}/${home}"
+        printf "chown -R %d:%d '%s'\n" "${uid}" "${_gid}" "${TARGET_DIR}/${home}"
+    fi
+}
+
+#----------------------------------------------------------------------------
+main() {
+    local username uid group gid passwd home shell groups comment
+
+    # Some sanity checks
+    if [ ${MIN_UID} -le 0 ]; then
+        fail "MIN_UID must be >0 (currently %d)\n" ${MIN_UID}
+    fi
+    if [ ${MIN_GID} -le 0 ]; then
+        fail "MIN_GID must be >0 (currently %d)\n" ${MIN_GID}
+    fi
+
+    # First, create all the main groups
+    while read username uid group gid passwd home shell groups comment; do
+        [ -n "${username}" ] || continue    # Package with no user
+        add_one_group "${group}" "${gid}"
+    done <"${USERS_TABLE}"
+
+    # Then, create all the additional groups
+    # If any additional group is already a main group, we should use
+    # the gid of that main group; otherwise, we can use any gid
+    while read username uid group gid passwd home shell groups comment; do
+        [ -n "${username}" ] || continue    # Package with no user
+        if [ "${groups}" != "-" ]; then
+            for g in ${groups//,/ }; do
+                add_one_group "${g}" -1
+            done
+        fi
+    done <"${USERS_TABLE}"
+
+    # Finally, add users
+    while read username uid group gid passwd home shell groups comment; do
+        [ -n "${username}" ] || continue    # Package with no user
+        add_one_user "${username}" "${uid}" "${group}" "${gid}" "${passwd}" \
+                     "${home}" "${shell}" "${groups}" "${comment}"
+    done <"${USERS_TABLE}"
+}
+
+#----------------------------------------------------------------------------
+main "${@}"
-- 
1.7.2.5

^ permalink raw reply related

* [Buildroot] [PATCH 2/2] package/tvheadend: use a non-root user to run the daemon
From: Yann E. MORIN @ 2013-01-01 20:10 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <cover.1357070939.git.yann.morin.1998@free.fr>

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/tvheadend/etc.default.tvheadend |    5 ++---
 package/tvheadend/tvheadend.mk          |   10 ++++++++--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/package/tvheadend/etc.default.tvheadend b/package/tvheadend/etc.default.tvheadend
index c769055..253f832 100644
--- a/package/tvheadend/etc.default.tvheadend
+++ b/package/tvheadend/etc.default.tvheadend
@@ -1,6 +1,5 @@
-# Once we have a real user, we'll use it
-TVH_USER=root
-TVH_GROUP=root
+TVH_USER=tvheadend
+TVH_GROUP=tvheadend
 #TVH_ADAPTERS=
 #TVH_HTTP_PORT=9981
 #TVH_HTSP_PORT=9982
diff --git a/package/tvheadend/tvheadend.mk b/package/tvheadend/tvheadend.mk
index 5100781..4a3f882 100644
--- a/package/tvheadend/tvheadend.mk
+++ b/package/tvheadend/tvheadend.mk
@@ -26,9 +26,11 @@ TVHEADEND_DEPENDENCIES     += dvb-apps
 # To run tvheadend, we need:
 #  - a startup script, and its config file
 #  - a default DB with a tvheadend admin
+#  - a non-root user to run as
 define TVHEADEND_INSTALL_DB
-	$(INSTALL) -D package/tvheadend/accesscontrol.1     \
-	              $(TARGET_DIR)/root/.hts/tvheadend/accesscontrol/1
+	$(INSTALL) -D -m 0600 package/tvheadend/accesscontrol.1     \
+	              $(TARGET_DIR)/home/tvheadend/.hts/tvheadend/accesscontrol/1
+	chmod -R go-rwx $(TARGET_DIR)/home/tvheadend
 endef
 TVHEADEND_POST_INSTALL_TARGET_HOOKS  = TVHEADEND_INSTALL_DB
 
@@ -37,6 +39,10 @@ define TVHEADEND_INSTALL_INIT_SYSV
 	$(INSTALL) -D package/tvheadend/S99tvheadend          $(TARGET_DIR)/etc/init.d/S99tvheadend
 endef
 
+define TVHEADEND_USERS
+tvheadend -1 tvheadend -1 * /home/tvheadend - video TVHeadend daemon
+endef
+
 #----------------------------------------------------------------------------
 # tvheadend is not an autotools-based package, but it is possible to
 # call its ./configure script as if it were an autotools one.
-- 
1.7.2.5

^ permalink raw reply related

* [Buildroot] [git commit] package/tvheadend: does not reqquire wordexp
From: Peter Korsgaard @ 2013-01-01 20:53 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=2147db9bdecd7b52ed53bbcd49f4f0e7a1ad1b23
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Builds just fine without it (probably stray include?)

Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/tvheadend/tvheadend-no-wordexp.patch |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/package/tvheadend/tvheadend-no-wordexp.patch b/package/tvheadend/tvheadend-no-wordexp.patch
new file mode 100644
index 0000000..ae290ed
--- /dev/null
+++ b/package/tvheadend/tvheadend-no-wordexp.patch
@@ -0,0 +1,20 @@
+epggrab: do not include wordexp.h
+
+Nothing from wordexp.h is needed (stray include?)
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+---
+Patch sent upstream, but no mailing-list. :-(
+Status: awaiting feedback.
+
+diff -durN tvheadend-v3.3.orig/src/epggrab.c tvheadend-v3.3/src/epggrab.c
+--- tvheadend-v3.3.orig/src/epggrab.c	2012-09-25 15:32:31.000000000 +0200
++++ tvheadend-v3.3/src/epggrab.c	2012-12-31 19:22:29.768431849 +0100
+@@ -20,7 +20,6 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <assert.h>
+-#include <wordexp.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/un.h>

^ permalink raw reply related

* [Buildroot] [PATCH] package/tvheadend: does not reqquire wordexp
From: Peter Korsgaard @ 2013-01-01 20:53 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <1357058963-18751-1-git-send-email-yann.morin.1998@free.fr>

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

 Yann> Builds just fine without it (probably stray include?)
 Yann> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Yann> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Committed, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [PATCH 1/3] system/skeleton: add the shadow-group file
From: Peter Korsgaard @ 2013-01-01 21:08 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <201301011636.05672.yann.morin.1998@free.fr>

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

Hi,

 >> The next question that comes up is: do we really need to support this
 >> in Buildroot?

 Yann> Well, I interpreted the abscence of that file as an oversight,
 Yann> that's why I thought of adding it.

 Yann> Right, we probably do not need the change-group feature in
 Yann> buildroot.  However, for the sake of consistency, I think it is
 Yann> good to have gshadow.

 Yann> But I can very well live without it, sure.

Well, the fact that nobody has ever asked for it in the 11 years
buildroot has existed and that Thomas (and me) didn't know about the
file, makes me think that perhaps it isn't too important to support it
in the default skeleton (you can certainly manually add it).

 Yann> Anyway... Happy New Year to all! :-)

Thanks, same to you!

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] 2012.11.x bugfix release
From: Peter Korsgaard @ 2013-01-01 21:14 UTC (permalink / raw)
  To: buildroot

FYI,

As promised, I'll do a 2012.11.1 bugfix release very soon. I've pushed a
2012.11.x bugfix branch earlier today:

http://git.buildroot.net/buildroot/log/?h=2012.11.x

Which contains:

Chris Zankel (1):
      xtensa: add -mlongcalls to CFLAGS for xtensa

Frank Hunleth (1):
      qt: fix qconfig configure parameter

Mikhail Boiko (1):
      dosfstools: fix download link

Peter Korsgaard (1):
      toolchain/gcc: also disable largefile for pass 1/2 if needed

Richard Braun (1):
      arch: fix BR2_ARCH for generic target variant


Let me know if I've missed anything important / any of these shouldn't
be included asap. I plan on releasing 2012.11.1 tomorrow.

Thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [git commit] lttng-libust: bump to 2.1.0
From: Peter Korsgaard @ 2013-01-01 21:18 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=b468f3cf525e9c9312e52be78599842deaf791c0
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Also remove lttng-libust-uclibc-sed_getcpu.patch because it got merged
upstream.

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 ...t-dont-build-cxx-tests-when-not-available.patch |   13 ++++----
 .../lttng-libust-uclibc-sched_getcpu.patch         |   32 --------------------
 package/lttng-libust/lttng-libust.mk               |    2 +-
 3 files changed, 8 insertions(+), 39 deletions(-)

diff --git a/package/lttng-libust/lttng-libust-dont-build-cxx-tests-when-not-available.patch b/package/lttng-libust/lttng-libust-dont-build-cxx-tests-when-not-available.patch
index bcc5636..b7e8a8f 100644
--- a/package/lttng-libust/lttng-libust-dont-build-cxx-tests-when-not-available.patch
+++ b/package/lttng-libust/lttng-libust-dont-build-cxx-tests-when-not-available.patch
@@ -38,15 +38,16 @@ index 26227cb..56d84db 100644
 +AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"])
 +
  ## Checks for libraries.
- AC_CHECK_LIB([dl], [dlopen])
- AC_CHECK_LIB([pthread], [pthread_create])
+ AC_CHECK_LIB([dl], [dlopen],
+ [
 diff --git a/tests/Makefile.am b/tests/Makefile.am
-index e79ab7c..1a8b795 100644
+index 2b12422..7365ce4 100644
 --- a/tests/Makefile.am
 +++ b/tests/Makefile.am
-@@ -1,6 +1,10 @@
--SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test demo hello.cxx
-+SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test demo
+@@ -1,7 +1,11 @@
+ SUBDIRS = . hello hello-static-lib fork ust-basic-tracing ust-multi-test \
+-		demo hello.cxx daemon
++		demo daemon
  #SUBDIRS = . hello2 basic basic_long simple_include snprintf test-nevents test-libustinstr-malloc dlopen same_line_marker trace_event register_test tracepoint libustctl_function_tests exit-fast
  
 +if CXX_WORKS
diff --git a/package/lttng-libust/lttng-libust-uclibc-sched_getcpu.patch b/package/lttng-libust/lttng-libust-uclibc-sched_getcpu.patch
deleted file mode 100644
index 6536185..0000000
--- a/package/lttng-libust/lttng-libust-uclibc-sched_getcpu.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-[PATCH] fix build with modern uClibc
-
-uClibc has sched_getcpu since 0.9.33, so the compat workaround should only
-be used for older uClibc versions.
-
-Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
----
- liblttng-ust/compat.h |    5 +++++
- 1 file changed, 5 insertions(+)
-
-Index: lttng-ust-1.9.2/liblttng-ust/compat.h
-===================================================================
---- lttng-ust-1.9.2.orig/liblttng-ust/compat.h
-+++ lttng-ust-1.9.2/liblttng-ust/compat.h
-@@ -17,6 +17,10 @@
- #include <sys/syscall.h>
- 
- #ifdef __UCLIBC__
-+/* old uClibc versions didn't have sched_getcpu */
-+#if __UCLIBC_MAJOR__ == 0 && \
-+	(__UCLIBC_MINOR__ < 9 || \
-+	 (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 32))
- #define __getcpu(cpu, node, cache)	syscall(__NR_getcpu, cpu, node, cache)
- static inline
- int sched_getcpu(void)
-@@ -26,5 +30,6 @@
- 	s = __getcpu(&c, NULL, NULL);
- 	return (s == -1) ? s : c;
- }
-+#endif /* <= 0.9.32 */
- #endif	/* __UCLIBC__ */
- #endif /* _UST_COMPAT_H */
diff --git a/package/lttng-libust/lttng-libust.mk b/package/lttng-libust/lttng-libust.mk
index cd6c65d..e1f51b1 100644
--- a/package/lttng-libust/lttng-libust.mk
+++ b/package/lttng-libust/lttng-libust.mk
@@ -4,7 +4,7 @@
 #
 #############################################################
 LTTNG_LIBUST_SITE    = http://lttng.org/files/lttng-ust/
-LTTNG_LIBUST_VERSION = 2.0.3
+LTTNG_LIBUST_VERSION = 2.1.0
 LTTNG_LIBUST_SOURCE  = lttng-ust-$(LTTNG_LIBUST_VERSION).tar.bz2
 
 LTTNG_LIBUST_INSTALL_STAGING = YES

^ permalink raw reply related

* [Buildroot] [git commit] lttng-modules: bump to 2.1.0
From: Peter Korsgaard @ 2013-01-01 21:19 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=cf32809c5e04eb0fffa3edf0b8323c8ea0183b05
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/lttng-modules/lttng-modules.mk |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/package/lttng-modules/lttng-modules.mk b/package/lttng-modules/lttng-modules.mk
index a245b19..54ae864 100644
--- a/package/lttng-modules/lttng-modules.mk
+++ b/package/lttng-modules/lttng-modules.mk
@@ -3,7 +3,7 @@
 # LTTng-modules: the kernel modules (requires at least Linux 2.6.38)
 #
 #############################################################
-LTTNG_MODULES_VERSION = 2.0.3
+LTTNG_MODULES_VERSION = 2.1.0
 LTTNG_MODULES_SITE    = http://lttng.org/files/lttng-modules/
 LTTNG_MODULES_SOURCE  = lttng-modules-$(LTTNG_MODULES_VERSION).tar.bz2
 

^ permalink raw reply related

* [Buildroot] [git commit] lttng-tools: bump to 2.1.0
From: Peter Korsgaard @ 2013-01-01 21:19 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=3f538e53e1250263f7d2a3bc7d0f0c738265c940
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

* add patch adding src/bin/lttng-sessiond/lttng-ust-error.h which is
  missing in the lttng-tools-2.1.0 release tarball.
* update the sync_file_range patch.

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 ...ng-tools-Support-new-lttng-ust-error-code.patch |   82 ++++++++++++++++++++
 .../lttng-tools-no-sync-file-range-in-uclibc.patch |   51 ++++++------
 package/lttng-tools/lttng-tools.mk                 |    5 +-
 3 files changed, 112 insertions(+), 26 deletions(-)

diff --git a/package/lttng-tools/lttng-tools-Support-new-lttng-ust-error-code.patch b/package/lttng-tools/lttng-tools-Support-new-lttng-ust-error-code.patch
new file mode 100644
index 0000000..73d0884
--- /dev/null
+++ b/package/lttng-tools/lttng-tools-Support-new-lttng-ust-error-code.patch
@@ -0,0 +1,82 @@
+From 49c336c1679295a31b92223dca05feccfe3e3464 Mon Sep 17 00:00:00 2001
+From: David Goulet <dgoulet@efficios.com>
+Date: Fri, 9 Nov 2012 13:37:25 -0500
+Subject: [PATCH] Support new lttng-ust error code
+
+Signed-off-by: David Goulet <dgoulet@efficios.com>
+---
+
+Only keep the src/bin/lttng-sessiond/lttng-ust-error.h adding part,
+needed to build lttng-tool without the lttng-libust dependency, i.e.
+with --disable-lttng-ust. (Samuel Martin)
+
+---
+ src/bin/lttng-sessiond/lttng-ust-error.h | 56 ++++++++++++++++++++++++++++++++
+ 6 files changed, 75 insertions(+), 13 deletions(-)
+ create mode 100644 src/bin/lttng-sessiond/lttng-ust-error.h
+
+diff --git a/src/bin/lttng-sessiond/lttng-ust-error.h b/src/bin/lttng-sessiond/lttng-ust-error.h
+new file mode 100644
+index 0000000..d83ecb8
+--- /dev/null
++++ b/src/bin/lttng-sessiond/lttng-ust-error.h
+@@ -0,0 +1,56 @@
++#ifndef _LTTNG_UST_ERROR_H
++#define _LTTNG_UST_ERROR_H
++
++/*
++ * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
++ *                      Julien Desfossez <julien.desfossez@polymtl.ca>
++ *                      Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; only
++ * version 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ */
++
++/*
++ * This header is meant for liblttng and libust internal use ONLY.
++ * These declarations should NOT be considered stable API.
++ */
++
++#include <limits.h>
++#include <unistd.h>
++
++#include "lttng-ust-abi.h"
++
++/*
++ * ustcomm error code.
++ */
++enum lttng_ust_error_code {
++	LTTNG_UST_OK = 0,			/* Ok */
++	LTTNG_UST_ERR = 1024,			/* Unknown Error */
++	LTTNG_UST_ERR_NOENT = 1025,		/* No entry */
++	LTTNG_UST_ERR_EXIST = 1026,     /* Object exists */
++	LTTNG_UST_ERR_INVAL = 1027,     /* Invalid argument */
++	LTTNG_UST_ERR_PERM  = 1028,     /* Permission denied */
++	LTTNG_UST_ERR_NOSYS = 1029,     /* Not implemented */
++
++	/* MUST be last element */
++	LTTNG_UST_ERR_NR,			/* Last element */
++};
++
++/*
++ * Return a human-readable error message for an lttng-ust error code.
++ * code must be a positive value (or 0).
++ */
++extern const char *lttng_ust_strerror(int code);
++
++#endif	/* _LTTNG_UST_ERROR_H */
+-- 
+1.8.0.3
+
diff --git a/package/lttng-tools/lttng-tools-no-sync-file-range-in-uclibc.patch b/package/lttng-tools/lttng-tools-no-sync-file-range-in-uclibc.patch
index 3a1807e..fcaaa3e 100644
--- a/package/lttng-tools/lttng-tools-no-sync-file-range-in-uclibc.patch
+++ b/package/lttng-tools/lttng-tools-no-sync-file-range-in-uclibc.patch
@@ -16,35 +16,36 @@ diff --git a/configure.ac b/configure.ac
 index 5808c79..065b9cf 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -120,7 +120,7 @@ AS_IF([test "x$lttng_ust_support" = "xyes"], [
-
- AM_CONDITIONAL([HAVE_LIBLTTNG_UST_CTL], [ test "x$ac_cv_lib_lttng_ust_ctl_ustctl_create_session" = "xyes" ])
-
+@@ -150,7 +150,7 @@ AS_IF([test "x$lttng_ust_support" = "xyes"], [
+ 	)
+ ])
+ AM_CONDITIONAL([HAVE_LIBLTTNG_UST_CTL], [test "x$lttng_ust_ctl_found" = xyes])
 -AC_CHECK_FUNCS([sched_getcpu sysconf])
 +AC_CHECK_FUNCS([sched_getcpu sysconf sync_file_range])
-
+ 
  # check for dlopen
  AC_CHECK_LIB([dl], [dlopen],
-diff --git a/src/common/compat/fcntl.h b/src/common/compat/fcntl.h
-index 58c1579..dafb33e 100644
---- a/src/common/compat/fcntl.h
-+++ b/src/common/compat/fcntl.h
-@@ -23,10 +23,15 @@
-
- #ifdef __linux__
-
-+#if defined(HAVE_SYNC_FILE_RANGE)
- extern int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes,
- 		unsigned int flags);
- #define lttng_sync_file_range(fd, offset, nbytes, flags) \
- 	compat_sync_file_range(fd, offset, nbytes, flags)
+@@ -394,4 +394,3 @@ AS_IF([test "x$consumerd_only" = "xno"],[
+ ])
+ 
+ AS_ECHO()
+-
+diff --git a/src/common/compat/compat-fcntl.c b/src/common/compat/compat-fcntl.c
+index 5a1c757..7ff63a3 100644
+--- a/src/common/compat/compat-fcntl.c
++++ b/src/common/compat/compat-fcntl.c
+@@ -23,7 +23,11 @@
+ int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes,
+ 		unsigned int flags)
+ {
++#ifdef HAVE_SYNC_FILE_RANGE
+ 	return sync_file_range(fd, offset, nbytes, flags);
 +#else
-+#define lttng_sync_file_range(fd, offset, nbytes, flags) \
-+	fdatasync(fd);
++	return fdatasync(fd);
 +#endif
-
- #elif defined(__FreeBSD__)
-
---
-1.7.10
+ }
+ 
+ #endif /* __linux__ */
+-- 
+1.8.0.3
 
diff --git a/package/lttng-tools/lttng-tools.mk b/package/lttng-tools/lttng-tools.mk
index fe48ac6..18477ba 100644
--- a/package/lttng-tools/lttng-tools.mk
+++ b/package/lttng-tools/lttng-tools.mk
@@ -3,7 +3,7 @@
 # LTTng-Tools: the trace control client
 #
 #############################################################
-LTTNG_TOOLS_VERSION = 2.0.4
+LTTNG_TOOLS_VERSION = 2.1.0
 LTTNG_TOOLS_SITE    = http://lttng.org/files/lttng-tools/
 LTTNG_TOOLS_SOURCE  = lttng-tools-$(LTTNG_TOOLS_VERSION).tar.bz2
 
@@ -11,6 +11,9 @@ LTTNG_TOOLS_SOURCE  = lttng-tools-$(LTTNG_TOOLS_VERSION).tar.bz2
 # dependency. However, having the babeltrace utilities built for the
 # host is very useful, since those tools allow to convert the binary
 # trace format into an human readable format.
+# Since the 2.1.0 release, lttng-tools depends on flex and bison,
+# but they are not added to the dependency list since they are
+# already Buildroot dependencies.
 LTTNG_TOOLS_DEPENDENCIES = liburcu popt host-lttng-babeltrace
 
 LTTNG_AUTORECONF = YES

^ permalink raw reply related

* [Buildroot] [git commit] lttng-babeltrace: bump to 1.0.0
From: Peter Korsgaard @ 2013-01-01 21:19 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=d70a9f6d645130fd1354ed040a132ac8ed71f46b
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/lttng-babeltrace/lttng-babeltrace.mk |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/package/lttng-babeltrace/lttng-babeltrace.mk b/package/lttng-babeltrace/lttng-babeltrace.mk
index dd701df..60b8a93 100644
--- a/package/lttng-babeltrace/lttng-babeltrace.mk
+++ b/package/lttng-babeltrace/lttng-babeltrace.mk
@@ -1,5 +1,5 @@
 LTTNG_BABELTRACE_SITE    = http://lttng.org/files/babeltrace/
-LTTNG_BABELTRACE_VERSION = 1.0.0-rc6
+LTTNG_BABELTRACE_VERSION = 1.0.0
 LTTNG_BABELTRACE_SOURCE  = babeltrace-$(LTTNG_BABELTRACE_VERSION).tar.bz2
 
 LTTNG_BABELTRACE_DEPENDENCIES = popt util-linux libglib2

^ permalink raw reply related

* [Buildroot] [PATCH 3/4] lttng-tools: bump to 2.1.0
From: Peter Korsgaard @ 2013-01-01 21:21 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <20121231181629.727e4aa7@skate>

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Dear Samuel Martin,
 Thomas> On Sun, 30 Dec 2012 23:17:46 +0100, Samuel Martin wrote:

 >> +# Since the 2.1.0 release, lttng-tools depends on flex and bison,
 >> +# but they are not added to the dependency list since they are
 >> +# already Buildroot dependencies.

 Thomas> We are not very clear about this: we have packages for host-flex and
 Thomas> host-bison, and they are actually used by some of our packages. But we
 Thomas> also require the user to have flex and bison installed in his
 Thomas> distribution.

 Thomas> Probably something that should be clarified, in one direction or
 Thomas> another.

Yes, it would be good to get rid of the flex/bison deps, and use our own
everywhere if possible.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [pull request] Pull request for branch for-master/lttng
From: Peter Korsgaard @ 2013-01-01 21:21 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <cover.1356905589.git.s.martin49@gmail.com>

>>>>> "Samuel" == Samuel Martin <s.martin49@gmail.com> writes:

 Samuel> Hello,
 Samuel> Here is version bump for Lttng and related packages.

 Samuel> The following changes since commit f1d44593a04ff3be981c8a3b01a502f0b18193ee:

 Samuel>   docs/manual: small fixes and enhancements to adding generic packages (2012-12-30 22:39:13 +0100)

 Samuel> are available in the git repository at:

 Samuel>   git at github.com:tSed/buildroot.git for-master/lttng

 Samuel> for you to fetch changes up to 192d7031d43a55c00114dbb0bc54b697e4baf02e:

 Samuel>   lttng-babeltrace: bump to 1.0.0 (2012-12-30 23:04:51 +0100)

 Samuel> ----------------------------------------------------------------
 Samuel> Samuel Martin (4):
 Samuel>       lttng-libust: bump to 2.1.0
 Samuel>       lttng-modules: bump to 2.1.0
 Samuel>       lttng-tools: bump to 2.1.0
 Samuel>       lttng-babeltrace: bump to 1.0.0

Committed all 4, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [git commit] valgrind: rename patches without version in the filename
From: Peter Korsgaard @ 2013-01-01 21:24 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=b4c0647e14fe329a8ac3d1d5de064e22b3624eda
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 ...r-check.patch => valgrind-compiler-check.patch} |    0
 ...ch => valgrind-dont-include-a-out-header.patch} |    0
 ...ort.patch => valgrind-fix-ccache-support.patch} |    0
 ....0-largefile.patch => valgrind-largefile.patch} |    0
 ...ore-ioctls.patch => valgrind-more-ioctls.patch} |    0
 ...ch => valgrind-workaround-SIGSEGV-on-PPC.patch} |    0
 6 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/package/valgrind/valgrind-3.7.0-compiler-check.patch b/package/valgrind/valgrind-compiler-check.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-compiler-check.patch
rename to package/valgrind/valgrind-compiler-check.patch
diff --git a/package/valgrind/valgrind-3.7.0-dont-include-a-out-header.patch b/package/valgrind/valgrind-dont-include-a-out-header.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-dont-include-a-out-header.patch
rename to package/valgrind/valgrind-dont-include-a-out-header.patch
diff --git a/package/valgrind/valgrind-3.7.0-fix-ccache-support.patch b/package/valgrind/valgrind-fix-ccache-support.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-fix-ccache-support.patch
rename to package/valgrind/valgrind-fix-ccache-support.patch
diff --git a/package/valgrind/valgrind-3.7.0-largefile.patch b/package/valgrind/valgrind-largefile.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-largefile.patch
rename to package/valgrind/valgrind-largefile.patch
diff --git a/package/valgrind/valgrind-3.7.0-more-ioctls.patch b/package/valgrind/valgrind-more-ioctls.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-more-ioctls.patch
rename to package/valgrind/valgrind-more-ioctls.patch
diff --git a/package/valgrind/valgrind-3.7.0-workaround-SIGSEGV-on-PPC.patch b/package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch
similarity index 100%
rename from package/valgrind/valgrind-3.7.0-workaround-SIGSEGV-on-PPC.patch
rename to package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch

^ permalink raw reply

* [Buildroot] [git commit] valgrind: bump to 3.8.1
From: Peter Korsgaard @ 2013-01-01 21:24 UTC (permalink / raw)
  To: buildroot

commit: http://git.buildroot.net/buildroot/commit/?id=85510dae95f90c0d8d5af65715dfa2dd9fe78be5
branch: http://git.buildroot.net/buildroot/commit/?id=refs/heads/master

Status of the patches:

 * valgrind-compiler-check.patch, no longer needed, merged upstream.

 * valgrind-dont-include-a-out-header.patch, kept, just refreshed

 * valgrind-fix-ccache-support.patch, adapted to the newer Valgrind
   release.

 * valgrind-largefile.patch, kept, just refreshed

 * valgrind-more-ioctls.patch, removed. Most of it was merged
   upstream. This patch was anyway a feature addition, so it shouldn't
   be kept in Buildroot.

 * valgrind-workaround-SIGSEGV-on-PPC.patch, kept as is, just
   refreshed.

This bump also fixes the build failure we were experiencing with
Valgrind 3.7.0 against recent Glibc versions.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
---
 package/valgrind/valgrind-compiler-check.patch     |   76 --------
 .../valgrind-dont-include-a-out-header.patch       |    2 +-
 package/valgrind/valgrind-fix-ccache-support.patch |   54 +++---
 package/valgrind/valgrind-largefile.patch          |   20 +-
 package/valgrind/valgrind-more-ioctls.patch        |  203 --------------------
 .../valgrind-workaround-SIGSEGV-on-PPC.patch       |    6 +-
 package/valgrind/valgrind.mk                       |    2 +-
 7 files changed, 41 insertions(+), 322 deletions(-)

diff --git a/package/valgrind/valgrind-compiler-check.patch b/package/valgrind/valgrind-compiler-check.patch
deleted file mode 100644
index 4a9fcba..0000000
--- a/package/valgrind/valgrind-compiler-check.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-Fix the compiler version check so that it doesn't misdetect the
-version when the compiler version contains parenthesis.
-
-Taken from upstream r12274.
-
-Index: valgrind-3.7.0/configure.in
-===================================================================
---- valgrind-3.7.0.orig/configure.in	2011-12-22 15:21:22.269669307 +0100
-+++ valgrind-3.7.0/configure.in	2011-12-22 15:21:54.029135051 +0100
-@@ -98,18 +98,21 @@
- # We don't want gcc < 3.0
- AC_MSG_CHECKING([for a supported version of gcc])
- 
--# Try to get the gcc version, sed-ing out some unexpected stuff
--# that appears with the default gcc on OSX 10.6 and 10.7 respectively.
--# Without this, the version number comes out as 686, 10 or 11 :-(
-+# Obtain the compiler version.
- # 
--# i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
--# i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
-+# A few examples of how the ${CC} --version output looks like:
-+#
-+# Arch Linux: i686-pc-linux-gnu-gcc (GCC) 4.6.2
-+# Debian Linux: gcc (Debian 4.3.2-1.1) 4.3.2
-+# openSUSE: gcc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585]
-+# Exherbo Linux: x86_64-pc-linux-gnu-gcc (Exherbo gcc-4.6.2) 4.6.2
-+# OS/X 10.6: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
-+# OS/X 10.7: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
-+# Clang: clang version 2.9 (tags/RELEASE_29/final)
- #
- [gcc_version=`${CC} --version \
--             | head -n 1 \
--             | $SED 's/i686-apple-darwin10//' \
--             | $SED 's/i686-apple-darwin11//' \
--             | $SED 's/^[^0-9]*\([0-9.]*\).*$/\1/'`]
-+             | $SED -n -e 's/[^ ]*gcc[^ ]* ([^)]*) \([0-9.]*\).*$/\1/p' \
-+                       -e 's/[^ ]*clang version \([0-9.]*\).*$/\1/p'`]
- 
- is_clang="notclang"
- if test "x`${CC} --version | head -n 1 | $SED 's/\(clang\) version.*/\1/'`" = "xclang" ; then
-Index: valgrind-3.7.0/configure
-===================================================================
---- valgrind-3.7.0.orig/configure	2011-12-22 15:22:05.138948143 +0100
-+++ valgrind-3.7.0/configure	2011-12-22 15:23:34.807439246 +0100
-@@ -5122,18 +5122,22 @@
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a supported version of gcc" >&5
- $as_echo_n "checking for a supported version of gcc... " >&6; }
- 
--# Try to get the gcc version, sed-ing out some unexpected stuff
--# that appears with the default gcc on OSX 10.6 and 10.7 respectively.
--# Without this, the version number comes out as 686, 10 or 11 :-(
-+# Obtain the compiler version.
-+# 
-+# A few examples of how the ${CC} --version output looks like:
- #
--# i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
--# i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
-+# Arch Linux: i686-pc-linux-gnu-gcc (GCC) 4.6.2
-+# Debian Linux: gcc (Debian 4.3.2-1.1) 4.3.2
-+# openSUSE: gcc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585]
-+# Exherbo Linux: x86_64-pc-linux-gnu-gcc (Exherbo gcc-4.6.2) 4.6.2
-+# OS/X 10.6: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
-+# OS/X 10.7: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
-+# Clang: clang version 2.9 (tags/RELEASE_29/final)
- #
- gcc_version=`${CC} --version \
--             | head -n 1 \
--             | $SED 's/i686-apple-darwin10//' \
--             | $SED 's/i686-apple-darwin11//' \
--             | $SED 's/^[^0-9]*\([0-9.]*\).*$/\1/'`
-+             | $SED -n -e 's/[^ ]*gcc[^ ]* ([^)]*) \([0-9.]*\).*$/\1/p' \
-+                       -e 's/[^ ]*clang version \([0-9.]*\).*$/\1/p'`
-+
- 
- is_clang="notclang"
- if test "x`${CC} --version | head -n 1 | $SED 's/\(clang\) version.*/\1/'`" = "xclang" ; then
diff --git a/package/valgrind/valgrind-dont-include-a-out-header.patch b/package/valgrind/valgrind-dont-include-a-out-header.patch
index ed1c939..2afd44a 100644
--- a/package/valgrind/valgrind-dont-include-a-out-header.patch
+++ b/package/valgrind/valgrind-dont-include-a-out-header.patch
@@ -20,7 +20,7 @@ Index: b/coregrind/m_debuginfo/readstabs.c
 ===================================================================
 --- a/coregrind/m_debuginfo/readstabs.c
 +++ b/coregrind/m_debuginfo/readstabs.c
-@@ -52,7 +52,21 @@
+@@ -53,7 +53,21 @@
  
  /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
  #if defined(VGO_linux)
diff --git a/package/valgrind/valgrind-fix-ccache-support.patch b/package/valgrind/valgrind-fix-ccache-support.patch
index 56d984b..40ada8d 100644
--- a/package/valgrind/valgrind-fix-ccache-support.patch
+++ b/package/valgrind/valgrind-fix-ccache-support.patch
@@ -11,41 +11,39 @@ is:
 
   /path/to/ccache /path/to/crossgcc -o foobar foobar.c -someflags
 
-Since this Perl script simply needs to add additional flags to the
-command line, we simply add them at the end of the command line
-instead of trying to add them at the beginning.
+Therefore, we tune the script to take into account the case where
+ccache is used.
 
 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 
-Index: valgrind-3.6.1/coregrind/link_tool_exe_linux.in
+Index: b/coregrind/link_tool_exe_linux.in
 ===================================================================
---- valgrind-3.6.1.orig/coregrind/link_tool_exe_linux.in	2011-12-22 13:59:08.933499060 +0100
-+++ valgrind-3.6.1/coregrind/link_tool_exe_linux.in	2011-12-22 13:59:50.302782709 +0100
-@@ -55,25 +55,13 @@
-     if (($#ARGV + 1) < 5);
- 
- my $ala = $ARGV[0];
-+shift;
- 
- # check for plausible-ish alt load address
+--- a/coregrind/link_tool_exe_linux.in
++++ b/coregrind/link_tool_exe_linux.in
+@@ -60,8 +60,16 @@
  die "Bogus alt-load address"
      if (length($ala) < 3 || index($ala, "0x") != 0);
  
--# The cc invokation to do the final link
++shift(@ARGV);
++
++if ($ARGV[0] =~ /.*ccache/) {
++    shift(@ARGV);
++}
++
+ # The cc invokation to do the final link
 -my $cc = $ARGV[1];
--
--# and the 'restargs' are argv[2 ..]
--
--# so, build up the complete command here:
--# 'cc' -static -Ttext='ala' 'restargs'
--
--my $cmd="$cc -static -Wl,-Ttext=$ala";
--
--# Add the rest of the parameters
--foreach my $n (2 .. $#ARGV) {
--   $cmd = "$cmd $ARGV[$n]";
--}
-+my $cmd=join(" ", @ARGV) . " -static -Wl,-Ttext=$ala";
++my $cc = $ARGV[0];
++
++shift(@ARGV);
  
- #print "link_tool_exe_linux: $cmd\n";
+ # and the 'restargs' are argv[2 ..]
+ 
+@@ -82,7 +90,7 @@
+ }
+ 
+ # Add the rest of the parameters
+-foreach my $n (2 .. $#ARGV) {
++foreach my $n (0 .. $#ARGV) {
+    $cmd = "$cmd $ARGV[$n]";
+ }
  
diff --git a/package/valgrind/valgrind-largefile.patch b/package/valgrind/valgrind-largefile.patch
index 53b6e6f..3a8a780 100644
--- a/package/valgrind/valgrind-largefile.patch
+++ b/package/valgrind/valgrind-largefile.patch
@@ -6,10 +6,10 @@ is detected.
 
 Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
 
-Index: valgrind-3.7.0/coregrind/m_initimg/initimg-linux.c
+Index: b/coregrind/m_initimg/initimg-linux.c
 ===================================================================
---- valgrind-3.7.0.orig/coregrind/m_initimg/initimg-linux.c	2011-10-26 23:24:43.000000000 +0200
-+++ valgrind-3.7.0/coregrind/m_initimg/initimg-linux.c	2011-12-22 14:53:12.798185055 +0100
+--- a/coregrind/m_initimg/initimg-linux.c
++++ b/coregrind/m_initimg/initimg-linux.c
 @@ -55,7 +55,11 @@
  
  /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
@@ -22,11 +22,11 @@ Index: valgrind-3.7.0/coregrind/m_initimg/initimg-linux.c
  /* This is for ELF types etc, and also the AT_ constants. */
  #include <elf.h>
  /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
-Index: valgrind-3.7.0/coregrind/m_main.c
+Index: b/coregrind/m_main.c
 ===================================================================
---- valgrind-3.7.0.orig/coregrind/m_main.c	2011-10-26 23:24:45.000000000 +0200
-+++ valgrind-3.7.0/coregrind/m_main.c	2011-12-22 14:53:12.798185055 +0100
-@@ -2743,7 +2743,11 @@
+--- a/coregrind/m_main.c
++++ b/coregrind/m_main.c
+@@ -2948,7 +2948,11 @@
  
  /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
  #define _GNU_SOURCE
@@ -38,10 +38,10 @@ Index: valgrind-3.7.0/coregrind/m_main.c
  /* This is in order to get AT_NULL and AT_PAGESIZE. */
  #include <elf.h>
  /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
-Index: valgrind-3.7.0/coregrind/m_ume/elf.c
+Index: b/coregrind/m_ume/elf.c
 ===================================================================
---- valgrind-3.7.0.orig/coregrind/m_ume/elf.c	2011-10-26 23:24:41.000000000 +0200
-+++ valgrind-3.7.0/coregrind/m_ume/elf.c	2011-12-22 14:53:12.798185055 +0100
+--- a/coregrind/m_ume/elf.c
++++ b/coregrind/m_ume/elf.c
 @@ -48,7 +48,11 @@
  
  /* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
diff --git a/package/valgrind/valgrind-more-ioctls.patch b/package/valgrind/valgrind-more-ioctls.patch
deleted file mode 100644
index fb58381..0000000
--- a/package/valgrind/valgrind-more-ioctls.patch
+++ /dev/null
@@ -1,203 +0,0 @@
-Add various ioctl()s
-
-Patch initially written by Eric Andersen <andersen@codepoet.org>.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-Index: valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c
-===================================================================
---- valgrind-3.7.0.orig/coregrind/m_syswrap/syswrap-linux.c	2011-10-27 12:55:05.000000000 +0200
-+++ valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c	2011-12-22 14:53:16.258126390 +0100
-@@ -4058,7 +4058,33 @@
-    case VKI_SG_GET_SG_TABLESIZE: /* 0x227f */
-       PRE_MEM_WRITE( "ioctl(SG_GET_SG_TABLESIZE)", ARG3, sizeof(int) );
-       break;
-+   case VKI_SCSI_IOCTL_GET_IDLUN:
-+      PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_IDLUN)", ARG3, sizeof(vki_scsi_idlun_t) );
-+      break;
-+   case VKI_SCSI_IOCTL_PROBE_HOST:
-+      {
-+	  int arraylen;
-+	  char *array = (char*)ARG3;
-+	  PRE_MEM_READ("ioctl(SCSI_IOCTL_PROBE_HOST)",  ARG3, sizeof(char)*4 );
-+	  arraylen = array[0] + (array[1]<<8) + (array[2]<<16) + (array[3]<<24);
-+	  PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*arraylen );
-+      }
-+      break;
-+   case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
-+      PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_BUS_NUMBER)", ARG3, sizeof(int) );
-+      break;
- 
-+   case VKI_FDRESET:
-+      break;
-+   case VKI_FDGETDRVTYP:
-+      PRE_MEM_WRITE( "ioctl(FDGETDRVTYP)", ARG3, sizeof(char)*16 );
-+      break;
-+   case VKI_FDPOLLDRVSTAT:
-+      PRE_MEM_WRITE( "ioctl(FDPOLLDRVSTAT)", ARG3, sizeof(vki_floppy_drive_struct_t) );
-+      break;
-+   case VKI_FDGETPRM:
-+      PRE_MEM_WRITE( "ioctl(FDGETPRM)", ARG3, sizeof(vki_floppy_struct_t) );
-+      break;
-    case VKI_IIOCGETCPS:
-       PRE_MEM_WRITE( "ioctl(IIOCGETCPS)", ARG3,
- 		     VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
-@@ -4373,6 +4399,8 @@
-    case VKI_BLKROGET:
-       PRE_MEM_WRITE( "ioctl(BLKROGET)", ARG3, sizeof(int));
-       break;
-+   case VKI_BLKRRPART:
-+      break;
-    case VKI_BLKGETSIZE:
-       PRE_MEM_WRITE( "ioctl(BLKGETSIZE)", ARG3, sizeof(unsigned long));
-       break;
-@@ -4381,6 +4409,8 @@
-    case VKI_BLKRAGET:
-       PRE_MEM_WRITE( "ioctl(BLKRAGET)", ARG3, sizeof(long));
-       break;
-+   case VKI_BLKFLSBUF:
-+      break;
-    case VKI_BLKFRASET:
-       break;
-    case VKI_BLKFRAGET:
-@@ -4447,6 +4477,8 @@
-       PRE_MEM_WRITE( "ioctl(CDROMREADTOCENTRY)", ARG3, 
- 		     sizeof(struct vki_cdrom_tocentry));
-       break;
-+   case VKI_CDROMEJECT:
-+      break;
-    case VKI_CDROMMULTISESSION: /* 0x5310 */
-       PRE_MEM_WRITE( "ioctl(CDROMMULTISESSION)", ARG3,
- 		     sizeof(struct vki_cdrom_multisession));
-@@ -5321,7 +5353,28 @@
-    case VKI_SG_GET_SG_TABLESIZE:
-       POST_MEM_WRITE(ARG3, sizeof(int));
-       break;      
-+   case VKI_SCSI_IOCTL_GET_IDLUN:
-+      POST_MEM_WRITE(ARG3, sizeof(vki_scsi_idlun_t));
-+      break;
-+   case VKI_SCSI_IOCTL_PROBE_HOST:
-+      if (RES > 0 && ARG3 )
-+	  POST_MEM_WRITE(ARG3, sizeof(char)*RES);
-+      break;
-+   case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
-+      POST_MEM_WRITE(ARG3, sizeof(int));
-+      break;
- 
-+   case VKI_FDRESET:
-+      break;
-+   case VKI_FDGETDRVTYP:
-+      POST_MEM_WRITE( ARG3, sizeof(char)*16 );
-+      break;
-+   case VKI_FDPOLLDRVSTAT:
-+      POST_MEM_WRITE( ARG3, sizeof(vki_floppy_drive_struct_t) );
-+      break;
-+   case VKI_FDGETPRM:
-+      POST_MEM_WRITE( ARG3, sizeof(vki_floppy_struct_t) );
-+      break;
-    case VKI_IIOCGETCPS:
-       POST_MEM_WRITE( ARG3, VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
-       break;
-@@ -5542,6 +5595,8 @@
-    case VKI_BLKROGET:
-       POST_MEM_WRITE(ARG3, sizeof(int));
-       break;
-+   case VKI_BLKRRPART:
-+      break;
-    case VKI_BLKGETSIZE:
-       POST_MEM_WRITE(ARG3, sizeof(unsigned long));
-       break;
-@@ -5550,6 +5605,8 @@
-    case VKI_BLKRAGET:
-       POST_MEM_WRITE(ARG3, sizeof(long));
-       break;
-+   case VKI_BLKFLSBUF:
-+      break;
-    case VKI_BLKFRASET:
-       break;
-    case VKI_BLKFRAGET:
-@@ -5591,6 +5648,8 @@
-    case VKI_CDROMREADTOCENTRY:
-       POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_tocentry));
-       break;
-+   case VKI_CDROMEJECT:
-+      break;
-    case VKI_CDROMMULTISESSION:
-       POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_multisession));
-       break;
-Index: valgrind-3.7.0/include/vki/vki-linux.h
-===================================================================
---- valgrind-3.7.0.orig/include/vki/vki-linux.h	2011-10-26 23:24:31.000000000 +0200
-+++ valgrind-3.7.0/include/vki/vki-linux.h	2011-12-22 14:53:16.258126390 +0100
-@@ -1654,7 +1654,9 @@
- 
- #define VKI_BLKROSET   _VKI_IO(0x12,93)	/* set device read-only (0 = read-write) */
- #define VKI_BLKROGET   _VKI_IO(0x12,94)	/* get read-only status (0 = read_write) */
-+#define VKI_BLKRRPART  _VKI_IO(0x12,95) /* re-read partition table */
- #define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
-+#define VKI_BLKFLSBUF  _VKI_IO(0x12,97) /* flush buffer cache */
- #define VKI_BLKRASET   _VKI_IO(0x12,98)	/* set read ahead for block device */
- #define VKI_BLKRAGET   _VKI_IO(0x12,99)	/* get current read ahead setting */
- #define VKI_BLKFRASET  _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
-@@ -1729,6 +1731,53 @@
- //#define SG_GET_COMMAND_Q 0x2270   /* Yields 0 (queuing off) or 1 (on) */
- #define VKI_SG_SET_COMMAND_Q 0x2271   /* Change queuing state with 0 or 1 */
- 
-+typedef struct vki_scsi_idlun
-+{
-+    int mux4;
-+    int host_unique_id;
-+
-+} vki_scsi_idlun_t;
-+#define VKI_SCSI_IOCTL_GET_IDLUN 0x5382		/* Gets a struct vki_scsi_idlun */
-+#define VKI_SCSI_IOCTL_PROBE_HOST 0x5385	/* Gets an arrary describing the SCSI host */
-+#define VKI_SCSI_IOCTL_GET_BUS_NUMBER 0x5386	/* Get the bus number for a device */
-+
-+//----------------------------------------------------------------------
-+// From linux-2.6.8.1/include/linux/fd.h
-+//----------------------------------------------------------------------
-+#define VKI_FDRESET 0x254		/* Takes an int by value */
-+#define VKI_FDGETDRVTYP 0x20f	/* Returns char floppy_drive_name[16] */
-+typedef struct vki_floppy_drive_struct {
-+	unsigned long flags;
-+	unsigned long spinup_date;
-+	unsigned long select_date;
-+	unsigned long first_read_date;
-+	short probed_format;
-+	short track;
-+	short maxblock;
-+	short maxtrack;
-+	int generation;
-+	int keep_data;
-+	int fd_ref;
-+	int fd_device;
-+	unsigned long last_checked;
-+	char *dmabuf;
-+	int bufblocks;
-+} vki_floppy_drive_struct_t;
-+#define VKI_FDPOLLDRVSTAT 0x213	    /* returns a struct floppy_drive_struct */
-+typedef struct vki_floppy_struct {
-+	unsigned int	size;
-+	unsigned int	sect;
-+	unsigned int	head;
-+	unsigned int	track;
-+	unsigned int	stretch;
-+	unsigned char	gap;
-+	unsigned char	rate;
-+	unsigned char	spec1;
-+	unsigned char	fmt_gap;
-+	const char	* name;
-+} vki_floppy_struct_t;
-+#define VKI_FDGETPRM 0x204	    /* returns a struct floppy_struct */
-+
- //----------------------------------------------------------------------
- // From linux-2.6.8.1/include/linux/cdrom.h
- //----------------------------------------------------------------------
-@@ -1738,6 +1787,7 @@
-                                            (struct cdrom_tochdr) */
- #define VKI_CDROMREADTOCENTRY	0x5306 /* Read TOC entry 
-                                            (struct cdrom_tocentry) */
-+#define VKI_CDROMEJECT		0x5309 /* Eject cdrom media */
- #define VKI_CDROMSUBCHNL	0x530b /* Read subchannel data 
-                                            (struct cdrom_subchnl) */
- #define VKI_CDROMREADMODE2	0x530c /* Read CDROM mode 2 data (2336 Bytes) 
diff --git a/package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch b/package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch
index ea91a00..3358c24 100644
--- a/package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch
+++ b/package/valgrind/valgrind-workaround-SIGSEGV-on-PPC.patch
@@ -8,10 +8,10 @@ Signed-off-by: Pierre Habouzit <madcoder@debian.org>
  coregrind/m_machine.c |    4 ++++
  1 files changed, 4 insertions(+), 0 deletions(-)
 
-Index: valgrind-3.7.0/coregrind/m_machine.c
+Index: b/coregrind/m_machine.c
 ===================================================================
---- valgrind-3.7.0.orig/coregrind/m_machine.c	2011-10-27 12:45:52.000000000 +0200
-+++ valgrind-3.7.0/coregrind/m_machine.c	2011-12-22 14:53:19.758067046 +0100
+--- a/coregrind/m_machine.c
++++ b/coregrind/m_machine.c
 @@ -27,6 +27,10 @@
     The GNU General Public License is contained in the file COPYING.
  */
diff --git a/package/valgrind/valgrind.mk b/package/valgrind/valgrind.mk
index cdebbec..ff35e6c 100644
--- a/package/valgrind/valgrind.mk
+++ b/package/valgrind/valgrind.mk
@@ -4,7 +4,7 @@
 #
 #############################################################
 
-VALGRIND_VERSION = 3.7.0
+VALGRIND_VERSION = 3.8.1
 VALGRIND_SITE    = http://valgrind.org/downloads/
 VALGRIND_SOURCE  = valgrind-$(VALGRIND_VERSION).tar.bz2
 VALGRIND_LICENSE = GPLv2 GFDLv1.2

^ permalink raw reply related

* [Buildroot] [PATCH 1/2] valgrind: rename patches without version in the filename
From: Peter Korsgaard @ 2013-01-01 21:24 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <1355958895-13294-1-git-send-email-thomas.petazzoni@free-electrons.com>

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Committed both, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [PATCH 1/2] valgrind: rename patches without version in the filename
From: Peter Korsgaard @ 2013-01-01 21:28 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <1355958895-13294-1-git-send-email-thomas.petazzoni@free-electrons.com>

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Whichbbtw reminds me - We still need to update our patch naming handling
as decided back at the fosdem dev days (point 7):

http://lists.busybox.net/pipermail/buildroot/2012-February/050371.html

I'll do so this week, hopefully it doesn't affect too many pending
patches.

-- 
Bye, Peter Korsgaard

^ permalink raw reply

* [Buildroot] [PATCH 1/2] packages: add ability for packages to create users
From: Samuel Martin @ 2013-01-01 21:50 UTC (permalink / raw)
  To: buildroot
In-Reply-To: <0b0fa3ae335483e6402e2c15465cacdb2d51b0d7.1357070939.git.yann.morin.1998@free.fr>

Hi Yann, all,

2013/1/1 Yann E. MORIN <yann.morin.1998@free.fr>:
> Packages that install daemons may need those daemons to run as a non-root,
> or an otherwise non-system (eg. 'daemon'), user.
>
> Add infrastructure for packages to create users, by declaring the
> FOO_USERS variable that conatin a makedev-syntax-like description
> of the user(s) to add.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> ---
[snip]
> @@ -252,6 +259,11 @@ information is (assuming the package name is +libfoo+) :
>    You can find some documentation for this syntax in the xref:makedev-syntax[].
>    This variable is optional.
>
> +* +LIBFOO_USERS+ lists the users to create for this package, if it installs
> +  a daemon you want to run with a specific user. The syntax is similar in
> +  spirit to the makedevs one, and is described in the xref:makeuser-syntax[].
> +  This variable is optional.
> +
>  * +LIBFOO_LICENSE+ defines the license (or licenses) under which the package
>    is released.
>    This name will appear in the manifest file produced by +make legal-info+.
> diff --git a/docs/manual/makedev-syntax.txt b/docs/manual/makedev-syntax.txt
> index 27517b3..fffdac9 100644
> --- a/docs/manual/makedev-syntax.txt
> +++ b/docs/manual/makedev-syntax.txt
You could add this in a new file...
Why should makedev-syntax.txt contain syntax details for makedev and mkusers?

> @@ -54,3 +54,68 @@ and then for device files corresponding to the partitions of
>  /dev/hda       b       640     0       0       3       1       1       1       15
>  -------------------------------------------------------------------
>
> +
> +[[makeuser-syntax]]
> +Makeuser syntax documentation
> +-----------------------------
> +
> +The syntax to create users is inspired by the makedev syntax, above, but
> +is psecific to buildroot.
s/psecific/specific/

> +
> +The syntax for adding a user is a space-separated list of fields, one
> +user per-line; the fields are:
> +
> +|=================================================================
> +|username |uid |group |gid |password |home |shell |groups |comment
> +|=================================================================
> +
> +Where:
> +
> +- +username+ is the desired user name (aka login name) for the user.
> +  It must be unique.
> +- +uid+ is the desired UID for the user. It must be unique, and not
> +  +0+. If set to +-1+, then a unique UID will be computed by buildroot.
s/buildroot/Buildroot/

> +- +group+ is the desired name for the user's main group.
> +- +gid+ is the desired GID for the user's main group. It must be unique,
> +  and not +0+. If set to +-1+, then a unique GID will be computed by
> +  buildroot.
ditto

> +- +password+ is the crypt(3)-encrypted password. If prefixed with +=+,
> +  then it is interpreted as clear-text, and will be cypt-encoded. If
s/cypt-encoded/crypt-encoded/

> +  prefixed with +!+, then login is disabled. If set to +*+, then login
> +  is not allowed.
Multiple prefix is allowed/supported; it could be explicitly mentioned.
Is the prefix order important?

So, the clear-text password itself should not starts with any prefix character?

> +- +home+ is the desired home directory for the user. If set to '-', no
> +  home directory will be created, and the user's home will be +/+.
> +  Explicitly setting +home+ to +/+ is not allowed.
> +- +shell+ is the desired shell for the user. If set to +-+, then
> +  +/bin/false+ is set as the user's shell.
> +- +groups+ is the comma-separated list of additional groups the user
> +  should be part of. If set to +-+, then the user will be a member of
> +  no additional group.
> +- +comment+ is an almost-free-form text.
> +
> +There are a few restrictions on the content of each field:
> +
> +* except for +comment+, all fields are mandatory.
> +* except for +comment+, fields may not contain spaces.
> +* no field may contain a column (+:+).
> +
> +If +home+ is not +-+, then the home directory, and all files below,
> +will belong to the user and its main group.
> +
> +Example:
> +
> +----
> +foo -1 bar -1 !=blabla /home/foo /bin/sh alpha,bravo Foo user
> +----
> +
> +This will create this user:
> +
> +- +username+ (aka login name) is: +foo+
> +- +uid+ is computed by buildroot
ditto

> +- main +group+ is: +bar+
> +- main group +gid+ is computed by buildroot
ditto

> +- clear-text +password+ is: +blabla+, will be crypt(3)-encrypted, but login is disabled.
> +- +home+ is: +/home/foo+
> +- +shell+ is: +/bin/sh+
> +- +foo+ is also a member of +groups+: +alpha+ and +bravo+
> +- +comment+ is: +Foo user+
[snip]
> --- /dev/null
> +++ b/support/scripts/mkusers
> @@ -0,0 +1,348 @@
> +#!/bin/bash
> +set -e
> +myname="${0##*/}"
> +
> +#----------------------------------------------------------------------------
> +# Configurable items
> +MIN_UID=1000
> +MAX_UID=1999
> +MIN_GID=1000
> +MAX_GID=1999
> +# No more is configurable below this point
> +#----------------------------------------------------------------------------
> +
> +#----------------------------------------------------------------------------
> +USERS_TABLE="${1}"
> +TARGET_DIR="${2}"
> +shift 2
> +PASSWD="${TARGET_DIR}/etc/passwd"
> +SHADOW="${TARGET_DIR}/etc/shadow"
> +GROUP="${TARGET_DIR}/etc/group"
> +# /etc/gsahdow is not part of the standard skeleton, so not everybody
> +# will have it, but some may hav it, and its content must be in sync
s/hav/have/


Regards,

-- 
Samuel

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox