annotate README @ 85:31b0567df051

Make PackageTrack.get_revision_numbers return the revisions as a sorted list. Add a test case for this.
author Bernhard Herzog <bh@intevation.de>
date Tue, 11 Sep 2007 09:53:34 +0000
parents 9a602d8eaa60
children 91deff3db739
rev   line source
42
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
1 README for TreePackager
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
2 =======================
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
3
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
4
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
5 TreePackager is a tool to automatically build debian packages from SVN.
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
6
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
7
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
8 Prerequisites
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
9 -------------
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
10
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
11 You need the following software to run TreePackager. In the list below,
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
12 parentheses contain the name of the corresponding package in Debian Etch
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
13 if its not the same as the software. The version required is usually
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
14 the one from debian etch.
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
15
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
16 Python 2.4 (python2.4-minimal)
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
17 Debian devscripts (devscripts)
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
18 subversion
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
19 pbuilder
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
20 sudo
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
21 bzip2
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
22
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
23 For the web front-end you also need the following software:
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
24
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
25 Genshi (python-genshi)
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
26 CherryPy (python-cherrypy)
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
27
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
28 Some of the packagers require additional software. The KDEPIM
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
29 enterprise branch packagers require the following additional software:
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
30
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
31 autoconf2.13
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
32 automake1.9
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
33
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
34
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
35 Installation
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
36 ------------
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
37
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
38 You can run the tree packager itself directly from the source tree.
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
39 However, you need to configure it first and setup pbuilder.
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
40
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
41
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
42 Configuration
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
43 -------------
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
44
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
45 To understand the configuration, first a few notes about the
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
46 architecture of TreePackager. The TreePackager consist of one program
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
47 that periodically updates svn working directories and if something has
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
48 changed, builds a new debian package from the working directory. The
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
49 program should run as a normal user. The sample configuration assumes
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
50 that it's the user "builder" with a home directory "/home/builder". The
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
51 default configuration manages a directory tree under
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
52 "/home/builder/enterprise".
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
53
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
54 The binary packages are built with pbuilder. Because pbuilder uses a
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
55 chroot environment to build the packages, it must be run as root. The
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
56 tree packager therefore needs a way to run pbuilder as root even though
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
57 itself runs as a non-root user. By default the tree packager uses sudo,
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
58 so you have to setup sudo to allow the tree packager user to invoke
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
59 pbuilder without a password. This can be accomplished with the
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
60 following line in /etc/sudoers (using the default user name):
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
61
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
62 builder ALL = NOPASSWD: /usr/sbin/pbuilder
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
63
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
64
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
65 Configure TreePackager
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
66 ~~~~~~~~~~~~~~~~~~~~~~
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
67
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
68 The file demo.cfg contains example configuration that contains most of
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
69 what is needed to package KDEPIM and kde-i18n from the KDEPIM enterprise
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
70 branch. Copy this file to treepkg.cfg and adapt it to your needs. The
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
71 comments in the file should provide most of the hints to get you
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
72 started. Some more information is in the "Configuring a packager"
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
73 section below.
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
74
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
75
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
76 Configuring a packager
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
77 ~~~~~~~~~~~~~~~~~~~~~~
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
78
73
26a617c0f76b fix typo
Bernhard Herzog <bh@intevation.de>
parents: 72
diff changeset
79 The configuration file contains one section for each packager. The
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
80 section name starts with a "pkg_" prefix. The possible options are
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
81 described in demo.cfg. However there are some things that need to be
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
82 set up outside of the config file.
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
83
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
84 Each packager has a base directory (the base_dir option in the
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
85 corresponding pkg_-section). One thing needed by a packager is the
72
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
86 contents of the debian sub-directory of the debian source package. When
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
87 creating the source package, the packager simply copies the
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
88 sub-directory "debian" of the base_dir into the directory making up the
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
89 source tree. How the debian directory is created and maintained is up
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
90 to you. Usually it's a good idea to start with the debian sub-directory
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
91 an existing debian package for the software.
42
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
92
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
93
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
94 Configure pbuilder
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
95 ~~~~~~~~~~~~~~~~~~
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
96
50
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
97 It's best to give the tree packager its own pbuilder configuration and
72
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
98 directories. The default configuration uses a "pbuilder" sub-directory
50
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
99 in /home/builder/enterprise. If you have created the treepkg.cfg file
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
100 with at least one packager and the correct root_cmd and pbuilderrc
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
101 options (the defaults for both should be OK if you use sudo as described
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
102 above), you can create the directories, the pbuilder configuration and
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
103 the chroot environment with the script initpbuilder.py like this:
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
104
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
105 bin/initpbuilder.py --mirrorsite=<URL of preferred debian mirror>
50
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
106
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
107 You can specify some more mirrors with the --othermirror option. For
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
108 more information run "bin/initpbuilder.py --help" and consult the pbuilder
50
225206553bba update README part about pbuilder config
Bernhard Herzog <bh@intevation.de>
parents: 42
diff changeset
109 documentation.
42
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
110
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
111
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
112 Configure the web front-end
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
113 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
114
70
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
115 The web front-end consists of a single HTML-page with an overview of the
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
116 packager status and links to build logs when available. There are two
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
117 ways to publish this front-end: as little web-server with a dynamic
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
118 web-page or as a directory with a bunch of files making up a static
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
119 web-site.
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
120
72
7e6da00cccef fix typos in README
Bernhard Herzog <bh@intevation.de>
parents: 71
diff changeset
121 Web-server:
70
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
122
42
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
123 The default configuration should be OK in most cases. If you want you
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
124 can customize it in cherrypy.cfg. Start the web front-end with
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
125
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
126 bin/starttreepkgweb.py
42
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
127
bad59cd04f34 add README
Bernhard Herzog <bh@intevation.de>
parents:
diff changeset
128 starttreepkgweb has some options to specify which configuration files to use.
70
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
129
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
130
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
131 Static pages:
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
132
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
133 The static pages are published using two programs, createstaticweb.py
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
134 and publishstaticweb.py. createstaticweb.py is run on the system where
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
135 the tree packager runs. publishstaticweb.py is usually run on another
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
136 system and connects via ssh and rsync to the tree packager host, creates
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
137 the files with createstaticweb.py and copies the files from the tree
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
138 packager host to a third host.
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
139
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
140 The configuration file for publishstaticweb.py is demostaticweb.cfg.
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
141 Copy this file to staticweb.cfg and adapt it to your system. The
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
142 comments in the file describe the options. Afterwards, run the script
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
143 with
70
4b537aadc5ce add README section for the static web-page config
Bernhard Herzog <bh@intevation.de>
parents: 69
diff changeset
144
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
145 bin/publishstaticweb.py
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
146
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
147
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
148 Running the Tree Packager
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
149 -------------------------
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
150
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
151 After configuration, run the tree packager with
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
152
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
153 bin/runtreepkg.py [options] [packager...]
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
154
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
155 For each packager listed on the command line -- or all configured
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
156 packagers if none are given -- the tree packager checks out or updates
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
157 the sources and builds binary packages if the new revision hasn't been
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
158 packaged yet.
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
159
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
160 If the option --once has been given, the tree packager exits after it
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
161 has checked each packager once. Without it, the check is done
78
9a602d8eaa60 initial revision of the subversion repository
Thomas Arendsen Hein <thomas@intevation.de>
parents: 73
diff changeset
162 repeatedly. The interval between two checks can be set in the configuration
71
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
163 file.
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
164
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
165 Call runtreepkg.py with the --help option to see a list of the available
2eefd12526ff flesh out the REAME file some more
Bernhard Herzog <bh@intevation.de>
parents: 70
diff changeset
166 options.
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)