Author Archive

31. Mai 2011

by

In: Allgemein, Fun, OpenSUSE

Kommentare deaktiviert für Quote of the Day: Sleeping

Only sleeping really saves energy, not doing work slowly.

Kay Sievers on OpenSUSE Factory.

This was meant to describe computer power saving strategies but applies to human brains, too.

26. Mai 2011

by

In: Allgemein, OpenSUSE, Tech

Kommentare deaktiviert für OpenSUSE Build Service rebranded

Today the openSUSE project announced that their packaging solution OpenSUSE Build Service will be re-branded to highlight the crossplatform nature of the product. The new name of the platform will be Open Build Service (OBS). Commercial support will also be available soon.

Ralph Dehner, CEO at B1 Systems GmbH noted:

“In the past B1 Systems has written build environments for the customers by itself. With the open Build Service now exists a “standard” which makes it easy to build packages for different distributions and architectures.

This will be also interesting for many other open source projects.”

26. Mai 2011

by

In: Allgemein, horde, OpenSUSE, Tech

3 comments

Today I submit-requested the Horde 4 Application Framework and the stable apps for openSUSE Factory.
This is becoming openSUSE 12.1 if the packages get accepted on time. They are currently in review.

openSUSE Legal team wants to review all packages‘ licensing – I’m sure that’s NOT the fun part of their job.

If everything works fine, openSUSE 12.1 will be the first distribution to feature horde 4 in their mainstream repositories.

// read more >

21. Mai 2011

by

In: Allgemein, OpenSUSE, Tech

Kommentare deaktiviert für Howto: Packaging 3rd party pear channel software with %php_pear_gen_filelist macro

The %php_pear_gen_filelist macro, maintained by Christian Wittmer, is really handy for packaging php pear software packages. It generates rpmlint-happy filelists and if you manage to get the dependencies right, packaging pear stuff for rpm is really a no-brainer. But the standard recipe for using this macro has one drawback: It’s ignorant of installed 3rd party roles and channels. 3rd party pear packages which depend on their channel being registered normally fail.

The workaround is easy: Copy the channel file to the build location.

Example:

#
# spec file for package php5-pear-Horde_Auth (Version 1.0.3)
#
# Copyright (c) 2011 Ralf Lang.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An „Open Source License“ is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative
# Please submit bugfixes or comments via http://bugs.opensuse.org/

# norootforbuild

Name: php5-pear-Horde_Auth
%define pear_name Horde_Auth
%define pear_sname horde_auth
Summary: PEAR: Horde Authentication API
Version: 1.0.3
Release: 1
License: LGPL
Group: Development/Libraries/PHP
Source0: http://pear.horde.org/get/Horde_Auth-%{version}.tgz
BuildRoot: %{_tmppath}/%{name}-%{version}-root-%(%{__id_u} -n)
URL: http://pear.horde.org/package/Horde_Auth
BuildRequires: php5-pear >= 1.4.7
Requires: php5-pear-Horde_Exception < 2.0.0, php5-pear-Horde_Util < 2.0.0, php5-pear >= 1.7.0
Conflicts: php5-pear-Horde_Exception = 2.0.0, php5-pear-Horde_Util = 2.0.0
BuildRequires: php5-pear-channel-horde
Requires: php5-pear-channel-horde
BuildArch: noarch
BuildRequires: php-macros

# Fix for renaming (package convention)
Provides: php5-pear-%{pear_sname} = %{version}
Provides: php-pear-%{pear_sname} = %{version}
Provides: pear-%{pear_sname} = %{version}
Obsoletes: php5-pear-%{pear_sname} < %{version}
Obsoletes: php-pear-%{pear_sname} < %{version}
Obsoletes: pear-%{pear_sname} < %{version}

%description
The Horde_Auth package provides a common interface into the various
backends for the Horde authentication system.

%prep
%setup -c

%build
%install
%{__mv} package*.xml %{pear_name}-%{version}
cd %{pear_name}-%{version}
PHP_PEAR_PHP_BIN=“$(which php) -d memory_limit=50m“
%{__mkdir_p} %{buildroot}%{php_peardir}/.channels/
%{__cp} %{php_peardir}/.channels/pear.horde.org.reg \
%{buildroot}%{php_peardir}/.channels/

%{__pear} -v \
-d doc_dir=/doc \
-d bin_dir=%{_bindir} \
-d data_dir=%{php_peardir}/data \
-d test_dir=%{php_peardir}/tests \
install –offline –nodeps -R „%{buildroot}“ package.xml

%{__install} -D -m 0644 package.xml %{buildroot}%{php_pearxmldir}/%{pear_name}.xml

%{__rm} -rf %{buildroot}/{doc,tmp}
%{__rm} -rf %{buildroot}%{php_peardir}/.{filemap,lock,registry,channels,depdb,depdblock}

cd ..

%php_pear_gen_filelist

%clean
rm -rf %{buildroot}

%post
if [ „$1“ = „1“ ]; then
%{__pear} install –nodeps –soft –force –register-only %{php_pearxmldir}/%{pear_name}.xml
fi
if [ „$1“ = „2“ ]; then
%{__pear} upgrade –offline –register-only %{php_pearxmldir}/%{pear_name}.xml
fi

%postun
if [ „$1“ = „0“ ]; then
%{__pear} uninstall –nodeps –ignore-errors –register-only pear.horde.org/%{pear_name}
fi

%files -f %{name}.files
%defattr(-,root,root)

Two parts are marked black: First you have to include the channel package with „BuildRequires:“. Second marked part copies the channel file from the installed location to the buildroot location.
Feel free to reuse or criticise this solution.

18. Mai 2011

by

In: Allgemein, horde, Tech

Kommentare deaktiviert für Horde Team announces RC1 of Horde Groupware 4.0

Since the release of Horde 4 and select applications, people kept asking for a new release of the popular Horde Groupware and Horde Groupware Webmail Edition bundles.

Horde is now about to release such a bundle, which features new ajax frontends for calendaring, tasks and improved mobile frontend for mail.

The new bundles will be released as pear collections. Gone are the tarballs.

18. Mai 2011

by

In: Allgemein, horde, Tech

Kommentare deaktiviert für Latest, Greatest – B1 Systems and Horde LLC on LinuxTag – passwd unofficial H4 package

This weekend, I visited the LinuxTag exhibition in Berlin, both to support my company’s booth and to talk to the horde guys whose booth was just on the opposite side, allowing easy coordination. As a result, I adopted the passwd tool which hasn’t yet been released for H4. It’s been packaged for the SUSE server:php:applications repository and will be part of the next pre-release of the upcoming Horde 4 Demo VM. First effort was adding a new backend driver ‚horde‘ which is just a proxy to horde’s configured authentication backend.

Tux all about LinuxTag

9. März 2011

by

In: Fun

Kommentare deaktiviert für Everybody talks about Enterprise Clouds as the Next Big Thing!

Nowadays, everybody talks about Enterprise Cloud Solutions as the next big thing in IT. Actually, it’s a thing from the 1960s. See yourself.

But, seriously, if you were looking for cool cloud solutions featuring OpenStack, better turn to B1 Systems GmbH from Germany.

9. März 2011

by

In: horde, OpenSUSE, Tech

Kommentare deaktiviert für Horde 4 Alpha 1 released (pear)

Yesterday the horde project released alpha versions of Horde Framework 4 and the Groupware apps (Notes, Calendar, Email, Filter,Address Book, Tasks)

I did a test drive and they basically work. IMP has been improved a lot and now integrates the mobile and ajax interface versions which came as separate apps in Horde 3. DIMP (Ajax version) now plays more nicely together with classic non-Ajax horde applications.

I will begin distribution packaging for SUSE Linux around the official release on April 05, 2011.

See also:

9. März 2011

by

In: horde

Kommentare deaktiviert für Developing Hort password safe: Horde 4 Shares

I recently decided I wanted to drop the Horde 3 password safe eleusis and build something new which uses Horde 4 API and features right from the start.

Thus I got the horde skeleton from git and created a new horde app called „hort“. Hort is an old German word for treasure as well as the place where the treasure is kept. Hort should keep safes which hold user/password pairs or other secret credentials. Those safes should be shareable among users. This is where horde_shares comes into play.

Horde Shares provides an API for sharing access rights like SHOW, READ, EDIT, CREATE or DELETE on objects or containers of objects with other users. Shares is used in the Calendaring App for sharing calendars with other users and in many other places.

basic setup in Application.php _init()

We want to add an injector for the shares API whenever the app is initialized and we want to auto-create an initial „home“ share for users which do not yet own one.

 

protected function _init()
{
// Create a share instance.
$GLOBALS['hort_shares'] = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Share')->create();

/* If the user doesn't own a safe, create one. */
if (!empty($GLOBALS['conf']['share']['auto_create']) &&
$GLOBALS['registry']->getAuth() &&
!$GLOBALS['hort_shares']->countShares($GLOBALS['registry']->getAuth())) {
$identity = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')->create();
$share = $GLOBALS['hort_shares']->newShare(
$GLOBALS['registry']->getAuth(),
strval(new Horde_Support_Randomid()),
sprintf(_("Default safe of %s"), $identity->getName())
);
$GLOBALS['hort_shares']->addShare($share);
}

}

And now let’s create the database schema. In Horde 4, this is done by creating a php script in the app’s /migrations/ sub-directory


class HortBaseTables extends Horde_Db_Migration_Base
{
/**
* Upgrade.
*/
public function up()
{
$tableList = $this->tables();

$t = $this->createTable('hort_sharesng', array('primaryKey' => 'share_id'));
$t->column('share_name', 'string', array('limit' => 255, 'null' => false));
$t->column('share_owner', 'string', array('limit' => 255));
$t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_creator_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_default_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_guest_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->column('attribute_name', 'string', array('limit' => 255, 'null' => false));
$t->column('attribute_desc', 'string', array('limit' => 255));
$t->column('attribute_params', 'text');
$t->column('share_parents','text');
$t->end();

$this->addIndex('hort_sharesng', array('share_name'));
$this->addIndex('hort_sharesng', array('share_owner'));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_creator_' . Horde_Perms::DELETE));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_default_' . Horde_Perms::DELETE));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng', array('perm_guest_' . Horde_Perms::DELETE));

$t = $this->createTable('hort_sharesng_groups', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->end();

$this->addIndex('hort_sharesng_groups', array('share_id'));
$this->addIndex('hort_sharesng_groups', array('group_uid'));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng_groups', array('perm_' . Horde_Perms::DELETE));

$t = $this->createTable('hort_sharesng_users', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('user_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm_' . Horde_Perms::SHOW, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::READ, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::EDIT, 'boolean', array('default' => false, 'null' => false));
$t->column('perm_' . Horde_Perms::DELETE, 'boolean', array('default' => false, 'null' => false));
$t->end();

$this->addIndex('hort_sharesng_users', array('share_id'));
$this->addIndex('hort_sharesng_users', array('user_uid'));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::SHOW));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::READ));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::EDIT));
$this->addIndex('hort_sharesng_users', array('perm_' . Horde_Perms::DELETE));

if (!in_array('hort_shares', $tableList)) {
$t = $this->createTable('hort_shares', array('primaryKey' => false));
$t->column('share_id', 'integer', array('null' => false));
$t->column('share_name', 'string', array('limit' => 255, 'null' => false));
$t->column('share_owner', 'string', array('limit' => 255, 'null' => false));
$t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
$t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
$t->column('attribute_name', 'string', array('limit' => 255, 'null' => false));
$t->column('attribute_desc', 'string', array('limit' => 255));
$t->primaryKey(array('share_id'));
$t->end();

$this->addIndex('hort_shares', array('share_name'));
$this->addIndex('hort_shares', array('share_owner'));
$this->addIndex('hort_shares', array('perm_creator'));
$this->addIndex('hort_shares', array('perm_default'));
$this->addIndex('hort_shares', array('perm_guest'));
}

if (!in_array('hort_shares_groups', $tableList)) {
$t = $this->createTable('hort_shares_groups');
$t->column('share_id', 'integer', array('null' => false));
$t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm', 'integer', array('null' => false));
$t->end();

$this->addIndex('hort_shares_groups', array('share_id'));
$this->addIndex('hort_shares_groups', array('group_uid'));
$this->addIndex('hort_shares_groups', 'perm');
}

if (!in_array('hort_shares_users', $tableList)) {
$t = $this->createTable('hort_shares_users');
$t->column('share_id', 'integer', array('null' => false));
$t->column('user_uid', 'string', array('limit' => 255, 'null' => false));
$t->column('perm', 'integer', array('null' => false));
$t->end();

$this->addIndex('hort_shares_users', array('share_id'));
$this->addIndex('hort_shares_users', array('user_uid'));
$this->addIndex('hort_shares_users', array('perm'));
}

}

/**
* Downgrade
*
*/
public function down()
{
$this->dropTable('hort_shares');
$this->dropTable('hort_shares_groups');
$this->dropTable('hort_shares_users');
$this->dropTable('hort_sharesng');
$this->dropTable('hort_sharesng_groups');
$this->dropTable('hort_sharesng_users');
}

}

8. März 2011

by

In: Allgemein, OpenSUSE, Tech

2 comments

OpenSUSE 11.4 repositories have just opened for downloading, official release will be this week. Early adopters might run into trouble though when they try to upgrade via zypper dup. You may end up with the following error:


Entfernung von (17419)libmodman0-0.4.3-1.5.x86_64(@System) fehlgeschlagen:
Fehler: Subprocess failed. Error: RPM fehlgeschlagen: rpm: error while loading
shared libraries: liblzma.so.0: cannot open shared object file: No such file or
directory

 

To prevent this, first update RPM to the new version.


zypper up rpm
zypper dup

If you already stepped into the trap, don’t panic


cd / ; curl lzma.zq1.de | tar xvz

will get the old library back in place.

see also Novell Bugzilla entry 677678

4. März 2011

by

In: Fun

1 comment

2. März 2011

by

In: horde, Tech

3 comments

Gunnar Wrobel today announced the new monthly horde newsletter:

Last month the Horde project sent out a first newsletter:
http://eepurl.com/ct4tP

The letter is meant to be sent monthly and summarizes progress and
plans concerning the Horde project.

You can subscribe to the newletter here:

http://horde.us2.list-manage.com

Of course, following this blog is an option, too 😉

 

 

1. März 2011

by

In: Allgemein, horde, Tech

1 comment

Horde 4 is due for April 05 2011 – and sports a new release of the major groupware applications. Among them, the time-tracking app hermes sees its 2.0 release. DIMP (ajax webmailer) and MIMP (mobile devices webmailer) have been integrated into IMP, the webmailer. The task tracker nag has been integrated into the new (optional) ajax frontend of the kronolith calendar app. By the way, Kronolith now allows assigning resources like rooms or beamers to events and provides resource scheduling just as if they were persons. The classic non-ajax interface is still available as a user preference though. Horde 4 won’t be compatible with the generic inventory app sesha anymore. The horde team has decided to abandon some other applications, too Currently, the Horde 4 git repository houses more than 20 applications, ranging from enhanced versions of long-running mainstream apps like the file manager gollem or the VCS chora to Horde Folks, the bleeding edge Facebook-like personal dashboard. Horde 4 will sport the ActiveSync protocol, opening synchronisation options for iPhone 4, Windows Phones and Android smartphones like the Motorola Milestone (Euro Brand) / Droid (US Brand) .

I will be dropping maintainence of Andre Pawlowski’s password safe eleusis in favor of a complete Horde4 rewrite, Hort.

30. Januar 2011

by

In: horde, Tech

5 comments

Horde3 has been designed to work with PHP 4 and aims to stay compatible till end of life. That is why some parts of Horde3 still rely on features or behaviour which is not default anymore in PHP5. It it still possible to make horde3 run on PHP5.3 as shipped by OpenSUSE 11.3 and factory:

in php.ini, please make sure that date.timezone has been set to any valid value:

linux-aggv:/srv/www/htdocs/horde # cat /etc/php5/apache2/php.ini |grep date.timezone
; http://php.net/date.timezone
date.timezone = Europe/Berlin

Please also make sure that your error log doesn’t get spammed by deprecated warnings:

cat /etc/php5/apache2/php.ini |grep E_DEPRECATED
; Production Value: E_ALL & ~E_DEPRECATED
; E_DEPRECATED – warn about code that will not work in future versions
; Production Value: E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

This should enable Horde3 to run on your bleeding edge openSUSE platform. Horde 4, scheduled April 5 2010, has been designed for PHP 5.x and won’t have any limitations.

If you are experiencing additional troubles, please check the „classics“:

* The Horde Cookie Path must be set to your webroot in /srv/www/htdocs/horde3/config/conf.php

* Do not turn on PHP safe mode (it isn’t actually „safe“ anyway and about to be removed)

This article assumes that you are running the openSUSE Horde3 packages from factory or server:php:applications

27. Januar 2011

by

In: Allgemein, horde, Tech

1 comment

Michael Rubinsky of the Horde Core team yesterday officially announced a release date for Horde 4

„Horde 4 and groupware apps will be released on April 5th, 2011.“

Horde 4 is a complete re-design of the Horde Framework and will be accompanied by new major releases of the Horde-based groupware Apps like Imp 5 (Webmail), Kronolith (Calendar) and Turba (Address book).

The community has been waiting quite some time but the horde developers emphasized quality over speed. Horde is currently discussing a fixed release scheme of a new minor or major release every six months, with bugfixes and security fixes whenever they feel appropriate.

Horde 4 will be completely pear-based. Gunnar Wrobel stated that Horde 4 will consist of something around 80 pear packages and that Horde apps will be released as pear packages, too.

Beginning with the first release candidates, I will provide rpm packages for openSUSE build service. By the way, the Horde RPMs for openSUSE have been included into openSUSE Factory last weekend and might get shipped with openSUSE 11.4