Merge lp:~vibhavp/landscape-client/landscape-client-typo.fix into lp:~landscape/landscape-client/trunk

Proposed by Vibhav Pant
Status: Merged
Merge reported by: Thomas Herve
Merged at revision: not available
Proposed branch: lp:~vibhavp/landscape-client/landscape-client-typo.fix
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 77605 lines (+75764/-0) (has conflicts)
349 files modified
LICENSE (+340/-0)
Makefile (+113/-0)
README (+46/-0)
applications/landscape-client-settings.desktop.in (+17/-0)
apt-update/Makefile (+7/-0)
apt-update/apt-update.c (+81/-0)
dbus-1/com.canonical.LandscapeClientRegistration.conf (+16/-0)
dbus-1/com.canonical.LandscapeClientRegistration.service (+4/-0)
dbus-1/com.canonical.LandscapeClientSettings.conf (+16/-0)
dbus-1/com.canonical.LandscapeClientSettings.service (+4/-0)
dbus/landscape.conf (+62/-0)
debian/README.source (+15/-0)
debian/changelog (+1189/-0)
debian/cloud-default.conf (+7/-0)
debian/compat (+1/-0)
debian/control (+76/-0)
debian/copyright (+36/-0)
debian/landscape-client-ui-install.install (+4/-0)
debian/landscape-client-ui.install (+9/-0)
debian/landscape-client.config (+64/-0)
debian/landscape-client.docs (+1/-0)
debian/landscape-client.init (+112/-0)
debian/landscape-client.install (+14/-0)
debian/landscape-client.logrotate (+20/-0)
debian/landscape-client.postinst (+150/-0)
debian/landscape-client.postrm (+50/-0)
debian/landscape-client.prerm (+45/-0)
debian/landscape-client.templates (+77/-0)
debian/landscape-common.config (+10/-0)
debian/landscape-common.dirs (+1/-0)
debian/landscape-common.install (+3/-0)
debian/landscape-common.postinst (+107/-0)
debian/landscape-common.postrm (+40/-0)
debian/landscape-common.prerm (+41/-0)
debian/landscape-common.templates (+20/-0)
debian/landscape-sysinfo.wrapper (+14/-0)
debian/po/POTFILES.in (+2/-0)
debian/po/templates.pot (+224/-0)
debian/pycompat (+1/-0)
debian/rules (+128/-0)
dev/dns-server (+99/-0)
dev/landscape-client-vm (+178/-0)
dev/run-piuparts (+154/-0)
dev/upload-to-ppa (+123/-0)
glib-2.0/schemas/com.canonical.landscape-client-settings.gschema.xml (+37/-0)
icons/preferences-management-service.svg (+62/-0)
landscape-client.conf (+12/-0)
landscape/__init__.py (+57/-0)
landscape/accumulate.py (+112/-0)
landscape/amp.py (+107/-0)
landscape/broker/__init__.py (+3/-0)
landscape/broker/amp.py (+142/-0)
landscape/broker/client.py (+200/-0)
landscape/broker/config.py (+98/-0)
landscape/broker/exchange.py (+436/-0)
landscape/broker/exchangestore.py (+113/-0)
landscape/broker/ping.py (+143/-0)
landscape/broker/registration.py (+437/-0)
landscape/broker/server.py (+274/-0)
landscape/broker/service.py (+98/-0)
landscape/broker/store.py (+342/-0)
landscape/broker/tests/badprivate.ssl (+15/-0)
landscape/broker/tests/badpublic.ssl (+23/-0)
landscape/broker/tests/helpers.py (+209/-0)
landscape/broker/tests/private.ssl (+15/-0)
landscape/broker/tests/public.ssl (+22/-0)
landscape/broker/tests/test_amp.py (+268/-0)
landscape/broker/tests/test_client.py (+302/-0)
landscape/broker/tests/test_config.py (+110/-0)
landscape/broker/tests/test_exchange.py (+997/-0)
landscape/broker/tests/test_exchangestore.py (+84/-0)
landscape/broker/tests/test_ping.py (+262/-0)
landscape/broker/tests/test_registration.py (+1148/-0)
landscape/broker/tests/test_server.py (+482/-0)
landscape/broker/tests/test_service.py (+102/-0)
landscape/broker/tests/test_store.py (+443/-0)
landscape/broker/tests/test_transport.py (+147/-0)
landscape/broker/transport.py (+124/-0)
landscape/configuration.py (+713/-0)
landscape/constants.py (+32/-0)
landscape/deployment.py (+367/-0)
landscape/diff.py (+23/-0)
landscape/hal.py (+52/-0)
landscape/lib/__init__.py (+6/-0)
landscape/lib/amp.py (+499/-0)
landscape/lib/bootstrap.py (+63/-0)
landscape/lib/bpickle.py (+161/-0)
landscape/lib/bpickle_dbus.py (+65/-0)
landscape/lib/command.py (+38/-0)
landscape/lib/configobj.py (+3728/-0)
landscape/lib/disk.py (+70/-0)
landscape/lib/dns.py (+78/-0)
landscape/lib/fd.py (+25/-0)
landscape/lib/fetch.py (+190/-0)
landscape/lib/fs.py (+54/-0)
landscape/lib/gpg.py (+38/-0)
landscape/lib/hashlib.py (+14/-0)
landscape/lib/initgroups.c (+49/-0)
landscape/lib/jiffies.py (+53/-0)
landscape/lib/lock.py (+32/-0)
landscape/lib/log.py (+14/-0)
landscape/lib/lsb_release.py (+26/-0)
landscape/lib/md5crypt.py (+159/-0)
landscape/lib/message.py (+49/-0)
landscape/lib/monitor.py (+188/-0)
landscape/lib/network.py (+203/-0)
landscape/lib/persist.py (+622/-0)
landscape/lib/process.py (+157/-0)
landscape/lib/scriptcontent.py (+15/-0)
landscape/lib/sequenceranges.py (+196/-0)
landscape/lib/store.py (+39/-0)
landscape/lib/sysstats.py (+93/-0)
landscape/lib/tag.py (+21/-0)
landscape/lib/tests/test_amp.py (+774/-0)
landscape/lib/tests/test_bootstrap.py (+156/-0)
landscape/lib/tests/test_bpickle.py (+50/-0)
landscape/lib/tests/test_command.py (+32/-0)
landscape/lib/tests/test_disk.py (+90/-0)
landscape/lib/tests/test_dns.py (+208/-0)
landscape/lib/tests/test_fd.py (+81/-0)
landscape/lib/tests/test_fetch.py (+457/-0)
landscape/lib/tests/test_fs.py (+83/-0)
landscape/lib/tests/test_gpg.py (+78/-0)
landscape/lib/tests/test_lock.py (+31/-0)
landscape/lib/tests/test_lsb_release.py (+33/-0)
landscape/lib/tests/test_monitor.py (+266/-0)
landscape/lib/tests/test_network.py (+181/-0)
landscape/lib/tests/test_persist.py (+486/-0)
landscape/lib/tests/test_process.py (+106/-0)
landscape/lib/tests/test_scriptcontent.py (+24/-0)
landscape/lib/tests/test_sequenceranges.py (+296/-0)
landscape/lib/tests/test_sysstats.py (+197/-0)
landscape/lib/tests/test_tag.py (+38/-0)
landscape/lib/tests/test_timestamp.py (+20/-0)
landscape/lib/tests/test_twisted_util.py (+131/-0)
landscape/lib/tests/test_vm_info.py (+159/-0)
landscape/lib/tests/test_warning.py (+30/-0)
landscape/lib/timestamp.py (+7/-0)
landscape/lib/twisted_amp.py (+2223/-0)
landscape/lib/twisted_util.py (+116/-0)
landscape/lib/vm_info.py (+54/-0)
landscape/lib/warning.py (+14/-0)
landscape/log.py (+50/-0)
landscape/manager/__init__.py (+4/-0)
landscape/manager/aptsources.py (+171/-0)
landscape/manager/config.py (+62/-0)
landscape/manager/customgraph.py (+254/-0)
landscape/manager/eucalyptus.py (+239/-0)
landscape/manager/fakepackagemanager.py (+57/-0)
landscape/manager/hardwareinfo.py (+28/-0)
landscape/manager/manager.py (+18/-0)
landscape/manager/packagemanager.py (+85/-0)
landscape/manager/plugin.py (+47/-0)
landscape/manager/processkiller.py (+73/-0)
landscape/manager/scriptexecution.py (+390/-0)
landscape/manager/service.py (+59/-0)
landscape/manager/shutdownmanager.py (+145/-0)
landscape/manager/store.py (+83/-0)
landscape/manager/tests/test_aptsources.py (+402/-0)
landscape/manager/tests/test_config.py (+59/-0)
landscape/manager/tests/test_customgraph.py (+707/-0)
landscape/manager/tests/test_eucalyptus.py (+383/-0)
landscape/manager/tests/test_fakepackagemanager.py (+70/-0)
landscape/manager/tests/test_hardwareinfo.py (+45/-0)
landscape/manager/tests/test_manager.py (+33/-0)
landscape/manager/tests/test_packagemanager.py (+344/-0)
landscape/manager/tests/test_plugin.py (+74/-0)
landscape/manager/tests/test_processkiller.py (+225/-0)
landscape/manager/tests/test_scriptexecution.py (+954/-0)
landscape/manager/tests/test_service.py (+63/-0)
landscape/manager/tests/test_shutdownmanager.py (+133/-0)
landscape/manager/tests/test_store.py (+64/-0)
landscape/manager/tests/test_usermanager.py (+1395/-0)
landscape/manager/usermanager.py (+174/-0)
landscape/message_schemas.py (+416/-0)
landscape/monitor/__init__.py (+4/-0)
landscape/monitor/activeprocessinfo.py (+78/-0)
landscape/monitor/aptpreferences.py (+61/-0)
landscape/monitor/computerinfo.py (+94/-0)
landscape/monitor/computeruptime.py (+175/-0)
landscape/monitor/config.py (+34/-0)
landscape/monitor/hardwareinventory.py (+114/-0)
landscape/monitor/loadaverage.py (+59/-0)
landscape/monitor/memoryinfo.py (+64/-0)
landscape/monitor/monitor.py (+34/-0)
landscape/monitor/mountinfo.py (+228/-0)
landscape/monitor/networkactivity.py (+119/-0)
landscape/monitor/networkdevice.py (+24/-0)
landscape/monitor/packagemonitor.py (+157/-0)
landscape/monitor/plugin.py (+92/-0)
landscape/monitor/processorinfo.py (+267/-0)
landscape/monitor/rebootrequired.py (+65/-0)
landscape/monitor/service.py (+63/-0)
landscape/monitor/temperature.py (+73/-0)
landscape/monitor/tests/test_activeprocessinfo.py (+639/-0)
landscape/monitor/tests/test_aptpreferences.py (+177/-0)
landscape/monitor/tests/test_computerinfo.py (+327/-0)
landscape/monitor/tests/test_computeruptime.py (+333/-0)
landscape/monitor/tests/test_config.py (+32/-0)
landscape/monitor/tests/test_hardwareinventory.py (+273/-0)
landscape/monitor/tests/test_loadaverage.py (+156/-0)
landscape/monitor/tests/test_memoryinfo.py (+181/-0)
landscape/monitor/tests/test_monitor.py (+67/-0)
landscape/monitor/tests/test_mountinfo.py (+751/-0)
landscape/monitor/tests/test_networkactivity.py (+218/-0)
landscape/monitor/tests/test_networkdevice.py (+58/-0)
landscape/monitor/tests/test_packagemonitor.py (+268/-0)
landscape/monitor/tests/test_plugin.py (+143/-0)
landscape/monitor/tests/test_processorinfo.py (+535/-0)
landscape/monitor/tests/test_rebootrequired.py (+123/-0)
landscape/monitor/tests/test_service.py (+88/-0)
landscape/monitor/tests/test_temperature.py (+172/-0)
landscape/monitor/tests/test_usermonitor.py (+332/-0)
landscape/monitor/usermonitor.py (+132/-0)
landscape/package/changer.py (+399/-0)
landscape/package/facade.py (+1075/-0)
landscape/package/interface.py (+84/-0)
landscape/package/releaseupgrader.py (+338/-0)
landscape/package/reporter.py (+734/-0)
landscape/package/skeleton.py (+181/-0)
landscape/package/store.py (+496/-0)
landscape/package/taskhandler.py (+292/-0)
landscape/package/tests/helpers.py (+621/-0)
landscape/package/tests/test_changer.py (+1691/-0)
landscape/package/tests/test_facade.py (+3099/-0)
landscape/package/tests/test_interface.py (+34/-0)
landscape/package/tests/test_releaseupgrader.py (+992/-0)
landscape/package/tests/test_reporter.py (+2088/-0)
landscape/package/tests/test_skeleton.py (+319/-0)
landscape/package/tests/test_store.py (+714/-0)
landscape/package/tests/test_taskhandler.py (+530/-0)
landscape/patch.py (+111/-0)
landscape/plugin.py (+60/-0)
landscape/reactor.py (+419/-0)
landscape/schema.py (+235/-0)
landscape/service.py (+124/-0)
landscape/sysinfo/deployment.py (+132/-0)
landscape/sysinfo/disk.py (+82/-0)
landscape/sysinfo/landscapelink.py (+13/-0)
landscape/sysinfo/load.py (+13/-0)
landscape/sysinfo/loggedinusers.py (+17/-0)
landscape/sysinfo/memory.py (+20/-0)
landscape/sysinfo/network.py (+37/-0)
landscape/sysinfo/processes.py (+29/-0)
landscape/sysinfo/sysinfo.py (+256/-0)
landscape/sysinfo/temperature.py (+24/-0)
landscape/sysinfo/testplugin.py (+24/-0)
landscape/sysinfo/tests/test_deployment.py (+288/-0)
landscape/sysinfo/tests/test_disk.py (+246/-0)
landscape/sysinfo/tests/test_landscapelink.py (+22/-0)
landscape/sysinfo/tests/test_load.py (+26/-0)
landscape/sysinfo/tests/test_loggedinusers.py (+47/-0)
landscape/sysinfo/tests/test_memory.py (+53/-0)
landscape/sysinfo/tests/test_network.py (+35/-0)
landscape/sysinfo/tests/test_processes.py (+56/-0)
landscape/sysinfo/tests/test_sysinfo.py (+402/-0)
landscape/sysinfo/tests/test_temperature.py (+46/-0)
landscape/sysvconfig.py (+50/-0)
landscape/tests/clock.py (+256/-0)
landscape/tests/helpers.py (+748/-0)
landscape/tests/mocker.py (+2155/-0)
landscape/tests/subunit.py (+373/-0)
landscape/tests/test_accumulate.py (+159/-0)
landscape/tests/test_amp.py (+135/-0)
landscape/tests/test_configuration.py (+2041/-0)
landscape/tests/test_deployment.py (+517/-0)
landscape/tests/test_diff.py (+34/-0)
landscape/tests/test_hal.py (+87/-0)
landscape/tests/test_log.py (+79/-0)
landscape/tests/test_patch.py (+173/-0)
landscape/tests/test_plugin.py (+61/-0)
landscape/tests/test_reactor.py (+403/-0)
landscape/tests/test_schema.py (+253/-0)
landscape/tests/test_service.py (+132/-0)
landscape/tests/test_sysvconfig.py (+87/-0)
landscape/tests/test_textmessage.py (+112/-0)
landscape/tests/test_watchdog.py (+1517/-0)
landscape/textmessage.py (+98/-0)
landscape/ui/constants.py (+3/-0)
landscape/ui/controller/app.py (+91/-0)
landscape/ui/controller/configuration.py (+122/-0)
landscape/ui/controller/tests/test_app.py (+137/-0)
landscape/ui/controller/tests/test_configuration.py (+212/-0)
landscape/ui/lib/polkit.py (+102/-0)
landscape/ui/model/configuration/mechanism.py (+113/-0)
landscape/ui/model/configuration/proxy.py (+110/-0)
landscape/ui/model/configuration/state.py (+586/-0)
landscape/ui/model/configuration/tests/test_mechanism.py (+210/-0)
landscape/ui/model/configuration/tests/test_proxy.py (+193/-0)
landscape/ui/model/configuration/tests/test_state.py (+645/-0)
landscape/ui/model/configuration/tests/test_uisettings.py (+167/-0)
landscape/ui/model/configuration/uisettings.py (+57/-0)
landscape/ui/model/registration/mechanism.py (+177/-0)
landscape/ui/model/registration/proxy.py (+139/-0)
landscape/ui/model/registration/tests/test_mechanism.py (+107/-0)
landscape/ui/model/registration/tests/test_proxy.py (+148/-0)
landscape/ui/tests/helpers.py (+187/-0)
landscape/ui/view/configuration.py (+356/-0)
landscape/ui/view/tests/test_configuration.py (+605/-0)
landscape/ui/view/ui/landscape-client-settings.glade (+490/-0)
landscape/upgraders/__init__.py (+9/-0)
landscape/upgraders/broker.py (+3/-0)
landscape/upgraders/legacy.py (+180/-0)
landscape/upgraders/monitor.py (+4/-0)
landscape/upgraders/package.py (+3/-0)
landscape/upgraders/tests/test_broker.py (+10/-0)
landscape/upgraders/tests/test_legacy.py (+325/-0)
landscape/upgraders/tests/test_monitor.py (+10/-0)
landscape/upgraders/tests/test_package.py (+10/-0)
landscape/user/changes.py (+139/-0)
landscape/user/management.py (+208/-0)
landscape/user/provider.py (+167/-0)
landscape/user/tests/helpers.py (+183/-0)
landscape/user/tests/test_changes.py (+299/-0)
landscape/user/tests/test_management.py (+604/-0)
landscape/user/tests/test_provider.py (+523/-0)
landscape/watchdog.py (+683/-0)
man/landscape-client.1 (+121/-0)
man/landscape-client.txt (+61/-0)
man/landscape-config.1 (+252/-0)
man/landscape-config.txt (+138/-0)
man/landscape-message.1 (+51/-0)
man/landscape-message.txt (+32/-0)
po/POTFILES.in (+8/-0)
po/fr.po (+168/-0)
po/landscape-client.pot (+170/-0)
polkit-1/com.canonical.LandscapeClientSettings.policy.in (+21/-0)
pqm-tests.sh (+57/-0)
root-client.conf (+14/-0)
scripts/landscape-broker (+8/-0)
scripts/landscape-client (+18/-0)
scripts/landscape-client-registration-mechanism (+15/-0)
scripts/landscape-client-settings-mechanism (+17/-0)
scripts/landscape-client-settings-ui (+35/-0)
scripts/landscape-client-ui-install (+78/-0)
scripts/landscape-config (+13/-0)
scripts/landscape-dbus-proxy (+82/-0)
scripts/landscape-is-cloud-managed (+12/-0)
scripts/landscape-manager (+8/-0)
scripts/landscape-message (+8/-0)
scripts/landscape-monitor (+8/-0)
scripts/landscape-package-changer (+10/-0)
scripts/landscape-package-reporter (+10/-0)
scripts/landscape-release-upgrader (+10/-0)
scripts/landscape-sysinfo (+22/-0)
setup.cfg (+9/-0)
setup.py (+66/-0)
smart-update/Makefile (+6/-0)
smart-update/smart-update.c (+129/-0)
Conflict adding file LICENSE.  Moved existing file to LICENSE.moved.
Conflict adding file Makefile.  Moved existing file to Makefile.moved.
Conflict adding file README.  Moved existing file to README.moved.
Conflict adding file applications.  Moved existing file to applications.moved.
Conflict adding file apt-update.  Moved existing file to apt-update.moved.
Conflict adding file dbus-1.  Moved existing file to dbus-1.moved.
Conflict adding file dbus.  Moved existing file to dbus.moved.
Conflict adding file debian.  Moved existing file to debian.moved.
Conflict adding file dev.  Moved existing file to dev.moved.
Conflict adding file glib-2.0.  Moved existing file to glib-2.0.moved.
Conflict adding file icons.  Moved existing file to icons.moved.
Conflict adding file landscape-client.conf.  Moved existing file to landscape-client.conf.moved.
Conflict adding file landscape.  Moved existing file to landscape.moved.
Conflict adding file man.  Moved existing file to man.moved.
Conflict adding file po.  Moved existing file to po.moved.
Conflict adding file polkit-1.  Moved existing file to polkit-1.moved.
Conflict adding file pqm-tests.sh.  Moved existing file to pqm-tests.sh.moved.
Conflict adding file root-client.conf.  Moved existing file to root-client.conf.moved.
Conflict adding file scripts.  Moved existing file to scripts.moved.
Conflict adding file setup.cfg.  Moved existing file to setup.cfg.moved.
Conflict adding file setup.py.  Moved existing file to setup.py.moved.
Conflict adding file smart-update.  Moved existing file to smart-update.moved.
To merge this branch: bzr merge lp:~vibhavp/landscape-client/landscape-client-typo.fix
Reviewer Review Type Date Requested Status
Landscape Pending
Review via email: mp+103011@code.launchpad.net

Description of the change

Fixes Typo

To post a comment you must log in.
Revision history for this message
Thomas Herve (therve) wrote :

Thanks, the typo has been fixed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'LICENSE'
2--- LICENSE 1970-01-01 00:00:00 +0000
3+++ LICENSE 2012-04-22 14:14:27 +0000
4@@ -0,0 +1,340 @@
5+ GNU GENERAL PUBLIC LICENSE
6+ Version 2, June 1991
7+
8+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
9+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
10+ Everyone is permitted to copy and distribute verbatim copies
11+ of this license document, but changing it is not allowed.
12+
13+ Preamble
14+
15+ The licenses for most software are designed to take away your
16+freedom to share and change it. By contrast, the GNU General Public
17+License is intended to guarantee your freedom to share and change free
18+software--to make sure the software is free for all its users. This
19+General Public License applies to most of the Free Software
20+Foundation's software and to any other program whose authors commit to
21+using it. (Some other Free Software Foundation software is covered by
22+the GNU Library General Public License instead.) You can apply it to
23+your programs, too.
24+
25+ When we speak of free software, we are referring to freedom, not
26+price. Our General Public Licenses are designed to make sure that you
27+have the freedom to distribute copies of free software (and charge for
28+this service if you wish), that you receive source code or can get it
29+if you want it, that you can change the software or use pieces of it
30+in new free programs; and that you know you can do these things.
31+
32+ To protect your rights, we need to make restrictions that forbid
33+anyone to deny you these rights or to ask you to surrender the rights.
34+These restrictions translate to certain responsibilities for you if you
35+distribute copies of the software, or if you modify it.
36+
37+ For example, if you distribute copies of such a program, whether
38+gratis or for a fee, you must give the recipients all the rights that
39+you have. You must make sure that they, too, receive or can get the
40+source code. And you must show them these terms so they know their
41+rights.
42+
43+ We protect your rights with two steps: (1) copyright the software, and
44+(2) offer you this license which gives you legal permission to copy,
45+distribute and/or modify the software.
46+
47+ Also, for each author's protection and ours, we want to make certain
48+that everyone understands that there is no warranty for this free
49+software. If the software is modified by someone else and passed on, we
50+want its recipients to know that what they have is not the original, so
51+that any problems introduced by others will not reflect on the original
52+authors' reputations.
53+
54+ Finally, any free program is threatened constantly by software
55+patents. We wish to avoid the danger that redistributors of a free
56+program will individually obtain patent licenses, in effect making the
57+program proprietary. To prevent this, we have made it clear that any
58+patent must be licensed for everyone's free use or not licensed at all.
59+
60+ The precise terms and conditions for copying, distribution and
61+modification follow.
62+
63
64+ GNU GENERAL PUBLIC LICENSE
65+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
66+
67+ 0. This License applies to any program or other work which contains
68+a notice placed by the copyright holder saying it may be distributed
69+under the terms of this General Public License. The "Program", below,
70+refers to any such program or work, and a "work based on the Program"
71+means either the Program or any derivative work under copyright law:
72+that is to say, a work containing the Program or a portion of it,
73+either verbatim or with modifications and/or translated into another
74+language. (Hereinafter, translation is included without limitation in
75+the term "modification".) Each licensee is addressed as "you".
76+
77+Activities other than copying, distribution and modification are not
78+covered by this License; they are outside its scope. The act of
79+running the Program is not restricted, and the output from the Program
80+is covered only if its contents constitute a work based on the
81+Program (independent of having been made by running the Program).
82+Whether that is true depends on what the Program does.
83+
84+ 1. You may copy and distribute verbatim copies of the Program's
85+source code as you receive it, in any medium, provided that you
86+conspicuously and appropriately publish on each copy an appropriate
87+copyright notice and disclaimer of warranty; keep intact all the
88+notices that refer to this License and to the absence of any warranty;
89+and give any other recipients of the Program a copy of this License
90+along with the Program.
91+
92+You may charge a fee for the physical act of transferring a copy, and
93+you may at your option offer warranty protection in exchange for a fee.
94+
95+ 2. You may modify your copy or copies of the Program or any portion
96+of it, thus forming a work based on the Program, and copy and
97+distribute such modifications or work under the terms of Section 1
98+above, provided that you also meet all of these conditions:
99+
100+ a) You must cause the modified files to carry prominent notices
101+ stating that you changed the files and the date of any change.
102+
103+ b) You must cause any work that you distribute or publish, that in
104+ whole or in part contains or is derived from the Program or any
105+ part thereof, to be licensed as a whole at no charge to all third
106+ parties under the terms of this License.
107+
108+ c) If the modified program normally reads commands interactively
109+ when run, you must cause it, when started running for such
110+ interactive use in the most ordinary way, to print or display an
111+ announcement including an appropriate copyright notice and a
112+ notice that there is no warranty (or else, saying that you provide
113+ a warranty) and that users may redistribute the program under
114+ these conditions, and telling the user how to view a copy of this
115+ License. (Exception: if the Program itself is interactive but
116+ does not normally print such an announcement, your work based on
117+ the Program is not required to print an announcement.)
118+
119
120+These requirements apply to the modified work as a whole. If
121+identifiable sections of that work are not derived from the Program,
122+and can be reasonably considered independent and separate works in
123+themselves, then this License, and its terms, do not apply to those
124+sections when you distribute them as separate works. But when you
125+distribute the same sections as part of a whole which is a work based
126+on the Program, the distribution of the whole must be on the terms of
127+this License, whose permissions for other licensees extend to the
128+entire whole, and thus to each and every part regardless of who wrote it.
129+
130+Thus, it is not the intent of this section to claim rights or contest
131+your rights to work written entirely by you; rather, the intent is to
132+exercise the right to control the distribution of derivative or
133+collective works based on the Program.
134+
135+In addition, mere aggregation of another work not based on the Program
136+with the Program (or with a work based on the Program) on a volume of
137+a storage or distribution medium does not bring the other work under
138+the scope of this License.
139+
140+ 3. You may copy and distribute the Program (or a work based on it,
141+under Section 2) in object code or executable form under the terms of
142+Sections 1 and 2 above provided that you also do one of the following:
143+
144+ a) Accompany it with the complete corresponding machine-readable
145+ source code, which must be distributed under the terms of Sections
146+ 1 and 2 above on a medium customarily used for software interchange; or,
147+
148+ b) Accompany it with a written offer, valid for at least three
149+ years, to give any third party, for a charge no more than your
150+ cost of physically performing source distribution, a complete
151+ machine-readable copy of the corresponding source code, to be
152+ distributed under the terms of Sections 1 and 2 above on a medium
153+ customarily used for software interchange; or,
154+
155+ c) Accompany it with the information you received as to the offer
156+ to distribute corresponding source code. (This alternative is
157+ allowed only for noncommercial distribution and only if you
158+ received the program in object code or executable form with such
159+ an offer, in accord with Subsection b above.)
160+
161+The source code for a work means the preferred form of the work for
162+making modifications to it. For an executable work, complete source
163+code means all the source code for all modules it contains, plus any
164+associated interface definition files, plus the scripts used to
165+control compilation and installation of the executable. However, as a
166+special exception, the source code distributed need not include
167+anything that is normally distributed (in either source or binary
168+form) with the major components (compiler, kernel, and so on) of the
169+operating system on which the executable runs, unless that component
170+itself accompanies the executable.
171+
172+If distribution of executable or object code is made by offering
173+access to copy from a designated place, then offering equivalent
174+access to copy the source code from the same place counts as
175+distribution of the source code, even though third parties are not
176+compelled to copy the source along with the object code.
177+
178
179+ 4. You may not copy, modify, sublicense, or distribute the Program
180+except as expressly provided under this License. Any attempt
181+otherwise to copy, modify, sublicense or distribute the Program is
182+void, and will automatically terminate your rights under this License.
183+However, parties who have received copies, or rights, from you under
184+this License will not have their licenses terminated so long as such
185+parties remain in full compliance.
186+
187+ 5. You are not required to accept this License, since you have not
188+signed it. However, nothing else grants you permission to modify or
189+distribute the Program or its derivative works. These actions are
190+prohibited by law if you do not accept this License. Therefore, by
191+modifying or distributing the Program (or any work based on the
192+Program), you indicate your acceptance of this License to do so, and
193+all its terms and conditions for copying, distributing or modifying
194+the Program or works based on it.
195+
196+ 6. Each time you redistribute the Program (or any work based on the
197+Program), the recipient automatically receives a license from the
198+original licensor to copy, distribute or modify the Program subject to
199+these terms and conditions. You may not impose any further
200+restrictions on the recipients' exercise of the rights granted herein.
201+You are not responsible for enforcing compliance by third parties to
202+this License.
203+
204+ 7. If, as a consequence of a court judgment or allegation of patent
205+infringement or for any other reason (not limited to patent issues),
206+conditions are imposed on you (whether by court order, agreement or
207+otherwise) that contradict the conditions of this License, they do not
208+excuse you from the conditions of this License. If you cannot
209+distribute so as to satisfy simultaneously your obligations under this
210+License and any other pertinent obligations, then as a consequence you
211+may not distribute the Program at all. For example, if a patent
212+license would not permit royalty-free redistribution of the Program by
213+all those who receive copies directly or indirectly through you, then
214+the only way you could satisfy both it and this License would be to
215+refrain entirely from distribution of the Program.
216+
217+If any portion of this section is held invalid or unenforceable under
218+any particular circumstance, the balance of the section is intended to
219+apply and the section as a whole is intended to apply in other
220+circumstances.
221+
222+It is not the purpose of this section to induce you to infringe any
223+patents or other property right claims or to contest validity of any
224+such claims; this section has the sole purpose of protecting the
225+integrity of the free software distribution system, which is
226+implemented by public license practices. Many people have made
227+generous contributions to the wide range of software distributed
228+through that system in reliance on consistent application of that
229+system; it is up to the author/donor to decide if he or she is willing
230+to distribute software through any other system and a licensee cannot
231+impose that choice.
232+
233+This section is intended to make thoroughly clear what is believed to
234+be a consequence of the rest of this License.
235+
236
237+ 8. If the distribution and/or use of the Program is restricted in
238+certain countries either by patents or by copyrighted interfaces, the
239+original copyright holder who places the Program under this License
240+may add an explicit geographical distribution limitation excluding
241+those countries, so that distribution is permitted only in or among
242+countries not thus excluded. In such case, this License incorporates
243+the limitation as if written in the body of this License.
244+
245+ 9. The Free Software Foundation may publish revised and/or new versions
246+of the General Public License from time to time. Such new versions will
247+be similar in spirit to the present version, but may differ in detail to
248+address new problems or concerns.
249+
250+Each version is given a distinguishing version number. If the Program
251+specifies a version number of this License which applies to it and "any
252+later version", you have the option of following the terms and conditions
253+either of that version or of any later version published by the Free
254+Software Foundation. If the Program does not specify a version number of
255+this License, you may choose any version ever published by the Free Software
256+Foundation.
257+
258+ 10. If you wish to incorporate parts of the Program into other free
259+programs whose distribution conditions are different, write to the author
260+to ask for permission. For software which is copyrighted by the Free
261+Software Foundation, write to the Free Software Foundation; we sometimes
262+make exceptions for this. Our decision will be guided by the two goals
263+of preserving the free status of all derivatives of our free software and
264+of promoting the sharing and reuse of software generally.
265+
266+ NO WARRANTY
267+
268+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
269+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
270+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
271+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
272+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
273+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
274+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
275+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
276+REPAIR OR CORRECTION.
277+
278+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
279+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
280+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
281+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
282+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
283+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
284+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
285+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
286+POSSIBILITY OF SUCH DAMAGES.
287+
288+ END OF TERMS AND CONDITIONS
289+
290
291+ How to Apply These Terms to Your New Programs
292+
293+ If you develop a new program, and you want it to be of the greatest
294+possible use to the public, the best way to achieve this is to make it
295+free software which everyone can redistribute and change under these terms.
296+
297+ To do so, attach the following notices to the program. It is safest
298+to attach them to the start of each source file to most effectively
299+convey the exclusion of warranty; and each file should have at least
300+the "copyright" line and a pointer to where the full notice is found.
301+
302+ <one line to give the program's name and a brief idea of what it does.>
303+ Copyright (C) <year> <name of author>
304+
305+ This program is free software; you can redistribute it and/or modify
306+ it under the terms of the GNU General Public License as published by
307+ the Free Software Foundation; either version 2 of the License, or
308+ (at your option) any later version.
309+
310+ This program is distributed in the hope that it will be useful,
311+ but WITHOUT ANY WARRANTY; without even the implied warranty of
312+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
313+ GNU General Public License for more details.
314+
315+ You should have received a copy of the GNU General Public License
316+ along with this program; if not, write to the Free Software
317+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
318+
319+
320+Also add information on how to contact you by electronic and paper mail.
321+
322+If the program is interactive, make it output a short notice like this
323+when it starts in an interactive mode:
324+
325+ Gnomovision version 69, Copyright (C) year name of author
326+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
327+ This is free software, and you are welcome to redistribute it
328+ under certain conditions; type `show c' for details.
329+
330+The hypothetical commands `show w' and `show c' should show the appropriate
331+parts of the General Public License. Of course, the commands you use may
332+be called something other than `show w' and `show c'; they could even be
333+mouse-clicks or menu items--whatever suits your program.
334+
335+You should also get your employer (if you work as a programmer) or your
336+school, if any, to sign a "copyright disclaimer" for the program, if
337+necessary. Here is a sample; alter the names:
338+
339+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
340+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
341+
342+ <signature of Ty Coon>, 1 April 1989
343+ Ty Coon, President of Vice
344+
345+This General Public License does not permit incorporating your program into
346+proprietary programs. If your program is a subroutine library, you may
347+consider it more useful to permit linking proprietary applications with the
348+library. If this is what you want to do, use the GNU Library General
349+Public License instead of this License.
350
351=== renamed file 'LICENSE' => 'LICENSE.moved'
352=== added file 'Makefile'
353--- Makefile 1970-01-01 00:00:00 +0000
354+++ Makefile 2012-04-22 14:14:27 +0000
355@@ -0,0 +1,113 @@
356+PYDOCTOR ?= pydoctor
357+TXT2MAN ?= txt2man
358+PYTHON ?= python
359+TRIAL_ARGS ?=
360+TEST_COMMAND = trial $(TRIAL_ARGS) landscape
361+
362+all: build
363+
364+build:
365+ $(PYTHON) setup.py build_ext -i
366+
367+check: build
368+ @if [ -z "$$DBUS_SESSION_BUS_ADDRESS" ]; then \
369+ OUTPUT=`dbus-daemon --print-address=1 --print-pid=1 --session --fork`; \
370+ export DBUS_SESSION_BUS_ADDRESS=`echo $$OUTPUT | cut -f1 -d ' '`; \
371+ DBUS_PID=`echo $$OUTPUT | cut -f2 -d ' '`; \
372+ trap "kill $$DBUS_PID" EXIT; \
373+ fi; \
374+ if [ -z "$$DISPLAY" ]; then \
375+ xvfb-run $(TEST_COMMAND); \
376+ else \
377+ $(TEST_COMMAND); \
378+ fi
379+
380+lint:
381+ bzr ls-lint
382+
383+pyflakes:
384+ -pyflakes `find landscape -name \*py|grep -v twisted_amp\.py|grep -v configobj\.py|grep -v mocker\.py`
385+
386+checkcertificate:
387+ -echo | openssl s_client -connect landscape.canonical.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt
388+
389+clean:
390+ -find landscape -name \*.pyc -exec rm {} \;
391+ -rm tags
392+ -rm _trial_temp -rf
393+ -rm docs/api -rf;
394+ -rm man/\*.1 -rf
395+ -rm sdist -rf
396+
397+doc: docs/api/twisted/pickle
398+ mkdir -p docs/api
399+ ${PYDOCTOR} --make-html --html-output docs/api --add-package landscape --extra-system=docs/api/twisted/pickle:twisted/
400+
401+docs/api/twisted/pickle:
402+ mkdir -p docs/api/twisted
403+ -${PYDOCTOR} --make-html --html-output docs/api/twisted --add-package /usr/share/pyshared/twisted -o docs/api/twisted/pickle
404+
405+manpages:
406+ ${TXT2MAN} -P Landscape -s 1 -t landscape-client < man/landscape-client.txt > man/landscape-client.1
407+ ${TXT2MAN} -P Landscape -s 1 -t landscape-config < man/landscape-config.txt > man/landscape-config.1
408+ ${TXT2MAN} -P Landscape -s 1 -t landscape-message < man/landscape-message.txt > man/landscape-message.1
409+
410+package: manpages
411+ @fakeroot debian/rules binary
412+ @echo "\n\nYou remembered to update the changelog, right?\n\n"
413+
414+SSH_USERNAME=`whoami`
415+SSH_HOST=people.ubuntu.com
416+PACKAGE_DIR=/home/jkakar/public_html/landscape
417+deploy:
418+ifneq (${PACKAGE},)
419+ @echo "Copying ${PACKAGE} to $(SSH_HOST):$(PACKAGE_DIR)"
420+ @scp ${PACKAGE} $(SSH_USERNAME)@$(SSH_HOST):$(PACKAGE_DIR)
421+ @echo "\nScanning packages and recreating the Packages file."
422+ @ssh -l $(SSH_USERNAME) $(SSH_HOST) \
423+ "cd $(PACKAGE_DIR) " \
424+ "&& dpkg-scanpackages . /dev/null > Packages " \
425+ "&& gzip -f Packages"
426+else
427+ @echo "You need to specify PACKAGE, as in: make deploy PACKAGE=<name>"
428+endif
429+
430+MESSAGE_DIR = `pwd`/runclient-messages
431+LOG_FILE = `pwd`/runclient.log
432+
433+reinstall:
434+ -sudo dpkg -P landscape-client
435+ -sudo rm -rf /var/log/landscape /etc/landscape /var/lib/landscape /etc/default/landscape-client
436+ -sudo apt-get install landscape-client
437+
438+freshdata:
439+ -sudo rm -rf $(MESSAGE_DIR)
440+ -sudo mkdir $(MESSAGE_DIR)
441+
442+run:
443+ -sudo ./landscape-client \
444+ -a onward -t "John's PC" \
445+ -u http://localhost:8080/message-system \
446+ -d $(MESSAGE_DIR) \
447+ --urgent-exchange-interval=5 \
448+ --log-level=debug \
449+ --ping-url=http://localhost:8081/ping \
450+
451+freshrun: freshdata run
452+
453+tags:
454+ -ctags --languages=python -R .
455+
456+etags:
457+ -etags --languages=python -R .
458+
459+UPSTREAM_VERSION=$(shell python -c "from landscape import UPSTREAM_VERSION; print UPSTREAM_VERSION")
460+sdist:
461+ mkdir -p sdist
462+ bzr export sdist/landscape-client-$(UPSTREAM_VERSION)
463+ rm -rf sdist/landscape-client-$(UPSTREAM_VERSION)/debian
464+ cd sdist && tar cfz landscape-client-$(UPSTREAM_VERSION).tar.gz landscape-client-$(UPSTREAM_VERSION)
465+ cd sdist && md5sum landscape-client-$(UPSTREAM_VERSION).tar.gz > landscape-client-$(UPSTREAM_VERSION).tar.gz.md5
466+ rm -rf sdist/landscape-client-$(UPSTREAM_VERSION)
467+
468+.PHONY: tags etags
469
470=== renamed file 'Makefile' => 'Makefile.moved'
471=== added file 'README'
472--- README 1970-01-01 00:00:00 +0000
473+++ README 2012-04-22 14:14:27 +0000
474@@ -0,0 +1,46 @@
475+== Non-root mode ==
476+
477+The Landscape Client generally runs as a combination of the 'root' and
478+'landscape' users. It is possible to disable the administrative features of
479+Landscape and run only the monitoring parts of it without using the 'root'
480+user at all.
481+
482+If you wish to use the Landscape Client in this way, it's recommended that you
483+perform these steps immediately after installing the landscape-client package.
484+
485+Edit /etc/default/landscape-client and add the following lines:
486+
487+ RUN=1
488+ DAEMON_USER=landscape
489+
490+Edit /etc/landscape/client.conf and add the following line:
491+
492+ monitor_only = true
493+
494+Now you can run 'sudo landscape-config' as usual to complete the configuration
495+of your client and register with the Landscape service.
496+
497+
498+== Developing ==
499+
500+To run the full test suite, you must have a dbus session bus
501+running. If you don't have one (for example, if you're running the
502+tests in an ssh session), run the following command:
503+
504+export DBUS_SESSION_BUS_ADDRESS=`dbus-daemon --print-address=1 --session --fork`
505+
506+Then your tests should pass.
507+
508+When you want to test the landscape client manually without management
509+features, you can simply run:
510+
511+$ ./scripts/landscape-client
512+
513+This defaults to the 'landscape-client.conf' configuration file.
514+
515+When you want to test management features manually, you'll need to run as root.
516+There's a configuration file 'root-client.conf' which specifies use of the
517+system bus.
518+
519+$ sudo ./scripts/landscape-client -c root-client.conf
520+
521
522=== renamed file 'README' => 'README.moved'
523=== added directory 'applications'
524=== renamed directory 'applications' => 'applications.moved'
525=== added file 'applications/landscape-client-settings.desktop.in'
526--- applications/landscape-client-settings.desktop.in 1970-01-01 00:00:00 +0000
527+++ applications/landscape-client-settings.desktop.in 2012-04-22 14:14:27 +0000
528@@ -0,0 +1,17 @@
529+[Desktop Entry]
530+_Name=Management Service
531+_Comment=Management Service Preferences
532+Exec=landscape-client-ui-install
533+Icon=preferences-management-service
534+Terminal=False
535+Type=Application
536+StartupNotify=true
537+Categories=GNOME;GTK;Settings;X-GNOME-SystemSettings;X-GNOME-Settings-Panel;
538+OnlyShowIn=GNOME;Unity;
539+X-GNOME-Bugzilla-Bugzilla=GNOME
540+X-GNOME-Bugzilla-Product=gnome-control-center
541+X-GNOME-Bugzilla-Component=sample
542+X-GNOME-Bugzilla-Version=1.0.0
543+X-GNOME-Settings-Panel=sample
544+X-GNOME-Keywords=device;system;information;memory;processor;version;default;application;fallback;preferred;
545+X-Ubuntu-Gettext-Domain=landscape-client
546
547=== added directory 'apt-update'
548=== renamed directory 'apt-update' => 'apt-update.moved'
549=== added file 'apt-update/Makefile'
550--- apt-update/Makefile 1970-01-01 00:00:00 +0000
551+++ apt-update/Makefile 2012-04-22 14:14:27 +0000
552@@ -0,0 +1,7 @@
553+NAME = apt-update
554+
555+$(NAME): $(NAME).c
556+ $(CC) $(CFLAGS) -Wall $< -o $@
557+
558+clean:
559+ rm -f $(NAME)
560
561=== added file 'apt-update/apt-update.c'
562--- apt-update/apt-update.c 1970-01-01 00:00:00 +0000
563+++ apt-update/apt-update.c 2012-04-22 14:14:27 +0000
564@@ -0,0 +1,81 @@
565+/*
566+
567+ Copyright (c) 2011 Canonical, Ltd.
568+
569+*/
570+
571+#define _GNU_SOURCE
572+#include <sys/resource.h>
573+#include <sys/types.h>
574+#include <sys/stat.h>
575+#include <grp.h>
576+#include <unistd.h>
577+#include <stdlib.h>
578+#include <string.h>
579+#include <errno.h>
580+#include <stdio.h>
581+#include <pwd.h>
582+
583+int main(int argc, char *argv[], char *envp[])
584+{
585+ char *apt_argv[] = {"/usr/bin/apt-get", "-q", "update", NULL};
586+ char *apt_envp[] = {"PATH=/bin:/usr/bin", NULL, NULL};
587+
588+ // Set the HOME environment variable
589+ struct passwd *pwd = getpwuid(geteuid());
590+ if (!pwd) {
591+ fprintf(stderr, "error: Unable to find passwd entry for uid %d (%s)\n",
592+ geteuid(), strerror(errno));
593+ exit(1);
594+ }
595+ if (asprintf(&apt_envp[1], "HOME=%s", pwd->pw_dir) == -1) {
596+ perror("error: Unable to create HOME environment variable");
597+ exit(1);
598+ }
599+
600+ // Drop any supplementary group
601+ if (setgroups(0, NULL) == -1) {
602+ perror("error: Unable to set supplementary groups IDs");
603+ exit(1);
604+ }
605+
606+ // Set real/effective gid and uid
607+ if (setregid(pwd->pw_gid, pwd->pw_gid) == -1) {
608+ fprintf(stderr, "error: Unable to set real and effective gid (%s)\n",
609+ strerror(errno));
610+ exit(1);
611+ }
612+ if (setreuid(pwd->pw_uid, pwd->pw_uid) == -1) {
613+ perror("error: Unable to set real and effective uid");
614+ exit(1);
615+ }
616+
617+ // Close all file descriptors except the standard ones
618+ struct rlimit rlp;
619+ if (getrlimit(RLIMIT_NOFILE, &rlp) == -1) {
620+ perror("error: Unable to determine file descriptor limits");
621+ exit(1);
622+ }
623+ int file_max;
624+ if (rlp.rlim_max == RLIM_INFINITY || rlp.rlim_max > 4096)
625+ file_max = 4096;
626+ else
627+ file_max = rlp.rlim_max;
628+ int file;
629+ for (file = 3; file < file_max; file++) {
630+ close(file);
631+ }
632+
633+ // Set umask to 022
634+ umask(S_IWGRP | S_IWOTH);
635+
636+ if (chdir("/") == -1) {
637+ perror("error: Unable to change working directory");
638+ exit(1);
639+ }
640+
641+ // Run apt-get update
642+ execve(apt_argv[0], apt_argv, apt_envp);
643+ perror("error: Unable to execute apt-get");
644+ return 1;
645+}
646
647=== added directory 'dbus'
648=== added directory 'dbus-1'
649=== renamed directory 'dbus-1' => 'dbus-1.moved'
650=== added file 'dbus-1/com.canonical.LandscapeClientRegistration.conf'
651--- dbus-1/com.canonical.LandscapeClientRegistration.conf 1970-01-01 00:00:00 +0000
652+++ dbus-1/com.canonical.LandscapeClientRegistration.conf 2012-04-22 14:14:27 +0000
653@@ -0,0 +1,16 @@
654+<?xml version="1.0" encoding="UTF-8"?>
655+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
656+"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
657+<busconfig>
658+ <type>system</type>
659+ <policy user="root">
660+ <allow own="com.canonical.LandscapeClientRegistration"/>
661+ <allow send_destination="com.canonical.LandscapeClientRegistration"/>
662+ <allow send_interface="com.canonical.LandscapeClientRegistration"/>
663+ </policy>
664+
665+ <policy context="default">
666+ <allow send_destination="com.canonical.LandscapeClientRegistration"/>
667+ <allow send_interface="com.canonical.LandscapeClientRegistration"/>
668+ </policy>
669+</busconfig>
670
671=== added file 'dbus-1/com.canonical.LandscapeClientRegistration.service'
672--- dbus-1/com.canonical.LandscapeClientRegistration.service 1970-01-01 00:00:00 +0000
673+++ dbus-1/com.canonical.LandscapeClientRegistration.service 2012-04-22 14:14:27 +0000
674@@ -0,0 +1,4 @@
675+[D-BUS Service]
676+Name=com.canonical.LandscapeClientRegistration
677+Exec=/usr/bin/landscape-client-registration-mechanism
678+User=root
679\ No newline at end of file
680
681=== added file 'dbus-1/com.canonical.LandscapeClientSettings.conf'
682--- dbus-1/com.canonical.LandscapeClientSettings.conf 1970-01-01 00:00:00 +0000
683+++ dbus-1/com.canonical.LandscapeClientSettings.conf 2012-04-22 14:14:27 +0000
684@@ -0,0 +1,16 @@
685+<?xml version="1.0" encoding="UTF-8"?>
686+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
687+"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
688+<busconfig>
689+ <type>system</type>
690+ <policy user="root">
691+ <allow own="com.canonical.LandscapeClientSettings"/>
692+ <allow send_destination="com.canonical.LandscapeClientSettings"/>
693+ <allow send_interface="com.canonical.LandscapeClientSettings"/>
694+ </policy>
695+
696+ <policy context="default">
697+ <allow send_destination="com.canonical.LandscapeClientSettings"/>
698+ <allow send_interface="com.canonical.LandscapeClientSettings"/>
699+ </policy>
700+</busconfig>
701
702=== added file 'dbus-1/com.canonical.LandscapeClientSettings.service'
703--- dbus-1/com.canonical.LandscapeClientSettings.service 1970-01-01 00:00:00 +0000
704+++ dbus-1/com.canonical.LandscapeClientSettings.service 2012-04-22 14:14:27 +0000
705@@ -0,0 +1,4 @@
706+[D-BUS Service]
707+Name=com.canonical.LandscapeClientSettings
708+Exec=/usr/bin/landscape-client-settings-mechanism
709+User=root
710\ No newline at end of file
711
712=== renamed directory 'dbus' => 'dbus.moved'
713=== added file 'dbus/landscape.conf'
714--- dbus/landscape.conf 1970-01-01 00:00:00 +0000
715+++ dbus/landscape.conf 2012-04-22 14:14:27 +0000
716@@ -0,0 +1,62 @@
717+<!DOCTYPE busconfig PUBLIC
718+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
719+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
720+<busconfig>
721+
722+ <policy user="landscape">
723+ <allow own="com.canonical.landscape.Broker" />
724+ <allow own="com.canonical.landscape.Monitor" />
725+
726+ <allow send_destination="com.canonical.landscape.Broker" />
727+ <allow receive_sender="com.canonical.landscape.Broker" />
728+
729+ <allow send_destination="com.canonical.landscape.Monitor" />
730+ <allow receive_sender="com.canonical.landscape.Monitor" />
731+
732+ <allow send_destination="com.canonical.landscape.Manager" />
733+ <allow receive_sender="com.canonical.landscape.Manager" />
734+
735+ <allow send_interface="org.freedesktop.Hal.Manager" />
736+ <allow send_interface="org.freedesktop.Hal.Device" />
737+
738+ </policy>
739+
740+ <!-- this is a horrible hack -->
741+ <policy user="haldaemon">
742+
743+ <allow receive_sender="com.canonical.landscape.Manager" />
744+ <allow receive_sender="com.canonical.landscape.Monitor" />
745+ <allow receive_sender="com.canonical.landscape.Broker" />
746+
747+ </policy>
748+
749+ <policy user="root">
750+ <allow own="com.canonical.landscape.Manager" />
751+
752+ <allow send_destination="com.canonical.landscape.Broker" />
753+ <allow receive_sender="com.canonical.landscape.Broker" />
754+
755+ <allow send_destination="com.canonical.landscape.Monitor" />
756+ <allow receive_sender="com.canonical.landscape.Monitor" />
757+
758+ <allow send_destination="com.canonical.landscape.Manager" />
759+ <allow receive_sender="com.canonical.landscape.Manager" />
760+ </policy>
761+
762+ <policy context="default">
763+ <deny own="com.canonical.landscape.Broker" />
764+ <deny own="com.canonical.landscape.Monitor" />
765+ <deny own="com.canonical.landscape.Manager" />
766+
767+ <deny send_destination="com.canonical.landscape.Broker" />
768+ <deny receive_sender="com.canonical.landscape.Broker" />
769+
770+ <deny send_destination="com.canonical.landscape.Monitor" />
771+ <deny receive_sender="com.canonical.landscape.Monitor" />
772+
773+ <deny send_destination="com.canonical.landscape.Manager" />
774+ <deny receive_sender="com.canonical.landscape.Manager" />
775+
776+ </policy>
777+
778+</busconfig>
779
780=== added directory 'debian'
781=== renamed directory 'debian' => 'debian.moved'
782=== added file 'debian/README.source'
783--- debian/README.source 1970-01-01 00:00:00 +0000
784+++ debian/README.source 2012-04-22 14:14:27 +0000
785@@ -0,0 +1,15 @@
786+When making a revision to this package, please update the *last* digit in the
787+Debian version number. e.g.
788+
789+ 1.0.29-0ubuntu0.9.04.0
790+
791+should become
792+
793+ 1.0.29-0ubuntu0.9.04.1
794+
795+In addition, when you build a package for a new client version, it would be
796+appreciated if you also updated the UPSTREAM_VERSION variable in
797+landscape/__init__.py to include the entire new client version number. This
798+helps us keep track of exact version of clients in use. There's no need to
799+update the DEBIAN_REVISION variable, as it gets automatically set at build
800+time.
801
802=== added file 'debian/changelog'
803--- debian/changelog 1970-01-01 00:00:00 +0000
804+++ debian/changelog 2012-04-22 14:14:27 +0000
805@@ -0,0 +1,1189 @@
806+landscape-client (12.04.3-0ubuntu1) precise; urgency=low
807+
808+ * Warn on unicode entry into settings UI (LP: #956612).
809+ * Sanitise hostname field in settings UI (LP: #954507).
810+ * Make it clear that the Landscape service is commercial (LP: #965850)
811+ * Further internationalize the settings UI (LP: #962899)
812+
813+ -- David Britton <dpb@canonical.com> Wed, 28 Mar 2012 10:59:58 -0600
814+
815+landscape-client (12.04.2-0ubuntu1) precise; urgency=low
816+
817+ * Depend on python-aptdaemon.gtk3widgets instead of python-aptdaemon and
818+ replace dependency on python-gobject by python-gi (LP: #961894)
819+ * Add i18n to the landscape-client-ui-install script. (LP: #961891)
820+
821+ -- David Britton <dpb@canonical.com> Thu, 22 Mar 2012 10:10:39 -0600
822+
823+landscape-client (12.04.1-0ubuntu1) precise; urgency=low
824+
825+ * Fix default landscape hostname in glib schema.
826+ * dpkg test improvements to fix intermittent failures.
827+ * If ssl_public_key is supplied, use it also when fetching script
828+ attachments. This fixes the case of using script execution with
829+ attachments when the Landscape server is using a custom CA,
830+ most common in LDS deployments. (LP: #959846)
831+ * Make sure we have a PATH variable set before doing package
832+ activities, and also set it in the initscript for good measure. If
833+ the client was configured and restarted by the new UI configuration
834+ tool, PATH wasn't set, triggering an error in dpkg. (LP: #961190)
835+ * Make landscape-client-ui depend on landscape-client-ui-install, so
836+ that we get an entry in the system settings if just
837+ landscape-client-ui is installed. The actual entry comes from
838+ landscape-client-ui-install.
839+ * Optimization: when adding binaries, don't reload every repo, only the one
840+ containing the binaries. (LP: #954822)
841+ * Handle the case where the user clicks twice inadvertently on the
842+ Landscape icon in system settings and don't start a second copy of
843+ itself. (LP: #960211)
844+
845+ -- Andreas Hasenack <andreas@canonical.com> Wed, 21 Mar 2012 16:15:49 -0300
846+
847+landscape-client (12.04-0ubuntu1) precise; urgency=low
848+
849+ * d/control: Dropping python-central and python-support since
850+ they are not used except in backports, and are not in main.
851+
852+ -- Clint Byrum <clint@ubuntu.com> Mon, 19 Mar 2012 16:05:49 -0700
853+
854+landscape-client (12.04-0ubuntu0.12.04.0) precise; urgency=low
855+
856+ * Change package management features to use APT instead of Smart (LP: #856244,
857+ #861707, #859615, #861345, #863239, #863259, #865270, #865272, #865285,
858+ #865273, #871641, #865299, #873196, #873939, #876493, #881973, #882438,
859+ #866014, #881998, #884142, #884151, #884131, #887037, #886208, #887578,
860+ #887947, #889067, #889069, #889087, #889099, #865303, #889113, #890605,
861+ #890606, #890609, #897416, #891855, #898681, #898683, #897656, #898542,
862+ #862212, #903202, #914734, #914735, #914737, #916301, #915280, #914742,
863+ #918925, #918175, #919179, #921664, #921699, #922582, #922511, #921712,
864+ #928750, #932136, #928941, #937411, #937567, #925543, #947803, #952973,
865+ #948142, #953136, #953906, #956590).
866+ * Add a GTK interface to configure the client (LP: #911279, #911666, #912163,
867+ #911665, #916300, #931937, #931937, #943622, #945025, #911279, #944652,
868+ #948464, #948416, #949158, #911671, #950864, #949208, #949147, #953070,
869+ #953292, #953463, #953034, #949200, #953026, #954499, #954516, #954285,
870+ #953065, #954414, #954332, #954542, #955966, #955139, #956030, #956119).
871+ * Add the ability to auto discover the server location on local deployment
872+ (LP: #917422, #927620, #917422, #928585, #929087, #932325, #948564)
873+ * Allow the client to accept arbitrary environment variables from the
874+ server for script execution (LP: #954999).
875+ * Make landscape-config exit non-zero when registration fails and
876+ --ok-no-register is not passed (LP: #271759).
877+ * Check for the content of /sys/bus/xen/devices to report a machine as a Xen
878+ VM instead of just relying on the existence of /sys/bus/xen (LP: #921970).
879+ * Make sure cloud registration succeeds if there is no kernel specified in
880+ the meta-data service (LP: #920453).
881+ * Report private and public IP adresses from the metadata service at cloud
882+ registration time (LP: #918366).
883+ * Add support for reporting hardware information using lshw (LP: #899002,
884+ #943975, #955734).
885+ * Add support for the new attachment service in script execution
886+ (LP: #893040).
887+ * Adds a new message type, 'register-provisioned-machine', which is meant
888+ to register computers using an OTP (LP: #881405).
889+ * Add local cloning option for load testing (LP: #872830, #925924).
890+ * Add more variables to preseeding (LP: #863204, #867710).
891+ * Allow the configuration of the ping interval (LP: #397884).
892+ * Add fake package reporters for load testing purposes (LP: #821571,
893+ #821570).
894+ * Report a package reporter error to the server if no APT sources are
895+ configured, to trigger a package reporter alert (LP: #823769).
896+
897+ -- Andreas Hasenack <andreas@canonical.com> Mon, 19 Mar 2012 09:33:34 -0300
898+
899+landscape-client (11.07.1.1-0ubuntu2) precise; urgency=low
900+
901+ * Remove build dependency on python-central | python-support for demotion.
902+
903+ -- Matthias Klose <doko@ubuntu.com> Sat, 17 Dec 2011 17:25:00 +0100
904+
905+landscape-client (11.07.1.1-0ubuntu1.11.10.0) oneiric; urgency=low
906+
907+ * Included missing files (LP: #814223).
908+
909+ -- Andreas Hasenack <andreas@canonical.com> Thu, 21 Jul 2011 15:40:46 -0300
910+
911+landscape-client (11.07.1.1-0ubuntu0.11.10.0) oneiric; urgency=low
912+
913+ * Try to load the old persist file if the current one doesn't exist or is
914+ empty (LP: #809210).
915+ * Fallback to gethostname to get something interesting out of get_fqdn.
916+ * Fix wrong ownership and permissions when the reporter is run as a result
917+ of applying a repository profile (LP: #804008).
918+ * Keep original sources.list ownership (LP: #804548).
919+ * Refactored tests (LP: #805746).
920+ * Preserve permissions of sources.list (LP: #804548).
921+ * Added a broker command line option (--record) that saves exchanges with the
922+ server to the filesystem
923+ * Detect if running in a vmware guest (LP: #795794).
924+ * Report VM type when run in the cloud (LP: #797069).
925+ * Report VM type in non-cloud registration (LP: #795752).
926+ * Report the package reporter result even in case of success, not just in
927+ case of failure (LP: #780406).
928+ * Report package reporter errors (LP: #732490).
929+ * Fix dependencies for hardy removing references to python 2.4 packages for
930+ pycurl and dbus (LP: #759764).
931+ * The landscape client now reports whether it is running on a virtual machine
932+ or not.
933+ * Add a plugin which manages APT sources.list and the associated GPG keys
934+ (LP: #758928).
935+ * Limit the number of items in a network message to 200, to prevent problems
936+ when communication is interrupted with the server and the client
937+ accumulates too many network items, thus overloading the server when it's
938+ available again (LP: #760486).
939+ * Updated version number in __init__.py so that the client reports the
940+ correct one in its user-agent string.
941+
942+ -- Andreas Hasenack <andreas@canonical.com> Mon, 18 Jul 2011 15:16:18 -0300
943+
944+landscape-client (11.02-0ubuntu0.11.04.1) natty; urgency=low
945+
946+ * debian/control, debian/rules: Add quilt
947+ * debian/patches/fix-landscape-monitor.patch: Fix landscape
948+ monitoring with gir1.0-gudev-1.0 installed. (LP: #747498)
949+
950+ -- Chuck Short <zulcss@ubuntu.com> Fri, 08 Apr 2011 09:46:24 -0400
951+
952+landscape-client (11.02-0ubuntu0.11.04.0) natty; urgency=low
953+
954+ * New upstream version (LP: #727324)
955+
956+ - Exit gracefully instead of crashing when the filesystem is
957+ read-only (LP: #649997).
958+
959+ - Drop hal requirement (LP: #708502).
960+
961+ - Enable HTTP compression in Curl (LP: #297623).
962+
963+ - Explicitly name log files that need to be rotated (LP: #634236).
964+
965+ - Assorted test suite fixes
966+
967+ -- Andreas Hasenack <andreas@canonical.com> Tue, 01 Mar 2011 15:38:11 -0300
968+
969+landscape-client (11.01-0ubuntu0.11.04.0) natty; urgency=low
970+
971+ * New upstream version (LP: #702928)
972+
973+ - Use a better load check for the sysinfo wrapper, taking into account the
974+ number of cores (LP: #643565).
975+
976+ - Add an option to bootstrap cloud instances using cloud-init
977+ (LP: #701972).
978+
979+ - Fix packaging for Natty (LP: #688115).
980+
981+ - Force deletion of all the persist data for the monitoring plugins at
982+ resynchronization, instead of relying each one of them to do
983+ (LP: #688161).
984+
985+ - Don't send the mount-activity message to the server anymore
986+ (LP: #688514).
987+
988+ - Workaround a new behavior in NetworkManager where getfqdn would report
989+ localhost instead of useful hostname (LP: #649142).
990+
991+ -- Thomas Hervé <thomas.herve@canonical.com> Fri, 14 Jan 2011 10:11:04 -0600
992+
993+landscape-client (1.5.5.1-0ubuntu0.10.10.0) maverick; urgency=low
994+
995+ * The client network plugin would send erroneous data if a network
996+ interface was removed (and its kernel module removed as well) and
997+ then readded (LP: #641264).
998+
999+ -- Andreas Hasenack <andreas@canonical.com> Mon, 20 Sep 2010 13:52:49 -0300
1000+
1001+landscape-client (1.5.5-0ubuntu0.10.10.0) maverick; urgency=low
1002+
1003+ * New upstream version (LP: #633468)
1004+
1005+ - The --help command line option can now be used without being
1006+ root (LP: #613256).
1007+
1008+ - The client Unix sockets and symlinks are now cleaned up at shutdown.
1009+ Without this cleaning, the client could refuse to start because of a PID
1010+ collision (LP: #607747).
1011+
1012+ - The network traffic plugin didn't use to take into account integer
1013+ overflows. This would cause the plugin to send negative values
1014+ sometimes (LP: #615371).
1015+
1016+ - If a payload had many user activities in it, only the last one would be
1017+ carried out (LP: #617624).
1018+
1019+ - The Eucalyptus plugin was not enabled by default, which means the Cloud
1020+ Topology feature of Landscape was not available (LP: #614493).
1021+
1022+ -- Andreas Hasenack <andreas@canonical.com> Wed, 08 Sep 2010 15:34:09 -0400
1023+
1024+landscape-client (1.5.4-0ubuntu0.10.10.0) maverick; urgency=low
1025+
1026+ * New upstream version (LP: #610744):
1027+
1028+ - The Eucalyptus management plugin reports the output of the
1029+ 'euca-describe-availability-zones verbose' command, which includes
1030+ information about the available instance types and the maximum
1031+ number of each instance type that the cloud can support (LP: #599338)
1032+
1033+ - Check if the package directory exists before trying to check the
1034+ package changer lock in the dbus-proxy. This fixes a bug when upgrading
1035+ a dbus-landscape which never registered (LP: #603514).
1036+
1037+ - Allow an LDS server to bootstrap new cloud instances with its own CA,
1038+ which is picked up by the client, written to a file on the instance, and
1039+ used in subsequent exchanges with the server (LP: #605079).
1040+
1041+ - Skip loopback interface when reporting device info (LP: #608314)
1042+
1043+ - Disable landscape-sysinfo when load is more than 1 (LP: #608278)
1044+
1045+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Wed, 28 Jul 2010 08:14:02 +0200
1046+
1047+landscape-client (1.5.2.1-0ubuntu0.10.10.0) maverick; urgency=low
1048+
1049+ * Include maverick in debian/rules substvars (LP: #596062)
1050+ * Filter duplicate network interfaces in get_active_interfaces (LP: #597000)
1051+
1052+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Mon, 28 Jun 2010 18:07:18 +0200
1053+
1054+landscape-client (1.5.2-0ubuntu0.10.10.0) maverick; urgency=low
1055+
1056+ * New upstream version (LP: #594594):
1057+ - A new includes information about active network devices and their
1058+ IP address in sysinfo output (LP: #272344).
1059+ - A new plugin collects information about network traffic (#LP :284662).
1060+ - Report information about which packages requested a reboot (LP: #538253).
1061+ - Fix breakage on Lucid AMIs having no ramdisk (LP: #574810).
1062+ - Migrate the inter-process communication system from DBus to Twisted AMP.
1063+
1064+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Wed, 16 Jun 2010 12:03:50 +0200
1065+
1066+landscape-client (1.5.0-0ubuntu0.10.04.1) lucid; urgency=low
1067+
1068+ * New upstream version
1069+ - Fix smart-update failing its very first run (LP: 562496)
1070+ - Depend on pythonX.Y-dbus and pythonX.Y-pycurl (LP: #563063)
1071+
1072+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Wed, 21 Apr 2010 12:31:28 +0200
1073+
1074+landscape-client (1.5.0-0ubuntu0.10.04.0) lucid; urgency=low
1075+
1076+ * New upstream version (LP: #557244)
1077+ - Fix package-changer running before smart-update has completed (LP: #542215)
1078+ - Report the version of Eucalyptus used to generate topology data (LP: #554007)
1079+ - Enable the Eucalyptus plugin by default, if supported (LP: #546531)
1080+ - Use a whitelist of allowed filesystem types to instead of a blacklist (LP: #351927)
1081+ - Report the update-manager logs to the server (LP: #503384)
1082+ - Turn off Curl's DNS caching for requests. (LP: #522688)
1083+
1084+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Wed, 07 Apr 2010 16:27:45 +0200
1085+
1086+landscape-client (1.4.4-0ubuntu0.10.04.0) lucid; urgency=low
1087+
1088+ * New upstream release (LP: #519200):
1089+ - Add a message for creating package locks (LP: #514334)
1090+ - Add support for auto-approved change-packages messages (LP: #517175)
1091+ - Add support for installing server-generated debian packages (LP: #509752)
1092+ - Add support for reporting Eucalyptus topology information (LP: #518501)
1093+ - Fix timeout while inserting large free-space message (LP: #218388)
1094+ - Fix wrong log path in motd (LP: #517454)
1095+ - Fix race condition in process excecution (LP: #517453)
1096+
1097+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Sat, 16 Jan 2010 14:11:32 +0100
1098+
1099+landscape-client (1.4.0-0ubuntu0.9.10.0) lucid; urgency=low
1100+
1101+ * New upstream release with several bug fixes:
1102+ - Fix landscape daemons fail to start when too many groups are
1103+ available (LP: #456124)
1104+ - Fix landscape programs wake up far too much. (LP: #340843)
1105+ - Fix Package manager fails with 'no such table: task' (LP #465846)
1106+ - Fix test suite leaving temporary files around (LP #476418)
1107+
1108+ * Add support for Ubuntu release upgrades:
1109+ - Add helper function to fetch many files at once (LP: #450629)
1110+ - Handle release-upgrade messages in the packagemanager
1111+ plugin (LP: #455217)
1112+ - Add a release-upgrader task handler (LP: #462543)
1113+ - Support upgrade-tool environment variables (LP: #463321)
1114+
1115+ * Add initial support for Smart package locking:
1116+ - Detect and report changes about Smart package locks (#488108)
1117+
1118+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Tue, 01 Dec 2009 09:16:26 +0100
1119+
1120+landscape-client (1.3.2.4-0ubuntu0.9.10.0) karmic; urgency=low
1121+
1122+ * New upstream release:
1123+ - Catch import errors in the landscape-sysinfo script to prevent
1124+ errors when landscape-sysinfo is run to update the motd during
1125+ upgrade (LP: #349996)
1126+ - Fix a long-standing bug in the client which causes resynchronisations
1127+ on the server (LP: #144475)
1128+ - When downloading hash-id stores, pass possible custom SSL certificates
1129+ to the fetch fuction (LP: #435887)
1130+ - Handle unicode username in custom graphs, and also report missing user
1131+ to the server properly (LP: #406388)
1132+ - Handle a SQlite bug when creating package store database, by making an
1133+ extra query to flush the table cache (LP: #416629)
1134+
1135+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Fri, 09 Oct 2009 18:21:24 +0200
1136+
1137+landscape-client (1.3.2.3-0ubuntu0.9.10.0) karmic; urgency=low
1138+
1139+ * New upstream release:
1140+ - Don't clear the hash_id_requests table upon resynchronize (LP #417122)
1141+
1142+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Wed, 26 Aug 2009 15:16:59 +0200
1143+
1144+landscape-client (1.3.2.2-0ubuntu0.9.10.3) karmic; urgency=low
1145+
1146+ * Drop unsed dependency on libcurl3 and explicitly depend on
1147+ libcurl3-gnutls (>= 7.15.1-1ubuntu3) on dapper (LP: #406885)
1148+ * Add missing debian/landscape-common.config (LP: #410378)
1149+
1150+ -- Free Ekanayaka <free.ekanayaka@canonical.com> Thu, 30 Jul 2009 15:16:07 +0200
1151+
1152+landscape-client (1.3.2.2-0ubuntu0.9.10.2) karmic; urgency=low
1153+
1154+ * debian/control: dropping python-pysqlite2 dependency, since this
1155+ package is in universe, and python now has built-in sqlite support,
1156+ LP: #406641
1157+
1158+ -- Dustin Kirkland <kirkland@ubuntu.com> Wed, 29 Jul 2009 17:33:47 -0500
1159+
1160+landscape-client (1.3.2.2-0ubuntu0.9.10.1) karmic; urgency=low
1161+
1162+ [ Free Ekanayaka ]
1163+ * New upstream release:
1164+ - Include the README file in landscape-client (LP: #396260)
1165+ - Fix client capturing stderr from run_command when constructing
1166+ hash-id-databases url (LP: #397480)
1167+ - Use substvars to conditionally depend on update-motd or
1168+ libpam-modules (LP: #393454)
1169+ - Fix reporting wrong version to the server (LP: #391225)
1170+ - The init script does not wait for the network to be available
1171+ before checking for EC2 user data (LP: #383336)
1172+ - When the broker is restarted by the watchdog, the state of the client
1173+ is inconsistent (LP: #380633)
1174+ - Package stays unknown forever in the client with hash-id-databases
1175+ support (LP: #381356)
1176+ - Standard error not captured when calling smart-update (LP: #387441)
1177+ - Changer calls reporter without switching groups, just user (LP: #388092)
1178+ - Run smart update in the package-reporter instead of having a cronjob (LP: #362355)
1179+ - Package changer does not inherit proxy settings (LP: #381241)
1180+ - The ./test script doesn't work in landscape-client (LP: #381613)
1181+ - The source package should build on all supported releases (LP: #385098)
1182+ - Strip smart update's output (LP: #387331)
1183+ - The fetch() timeout isn't based on activity (#389224)
1184+ - Client can use a UUID of "None" when fetching the hash-id-database (LP: #381291)
1185+ - Registration should use the fqdn rather than just the hostname (LP: #385730)
1186+
1187+ -- Mathias Gug <mathiaz@ubuntu.com> Wed, 22 Jul 2009 14:54:50 -0400
1188+
1189+landscape-client (1.0.29.1-0ubuntu0.9.04.1) karmic; urgency=low
1190+
1191+ * debian/control: depend on libpam-modules, rather than update-motd
1192+
1193+ -- Dustin Kirkland <kirkland@ubuntu.com> Thu, 16 Jul 2009 11:36:27 -0500
1194+
1195+landscape-client (1.0.29.1-0ubuntu0.9.04.0) jaunty; urgency=low
1196+
1197+ * Apply a fix for segfault bug involving curl timeouts. (LP: #360510)
1198+
1199+ -- Christopher Armstrong <radix@ubuntu.com> Mon, 13 Apr 2009 14:33:31 -0400
1200+
1201+landscape-client (1.0.29-0ubuntu0.9.04.0) jaunty; urgency=low
1202+
1203+ * New upstream bugfix release (LP: #358744)
1204+ - Add a timeout to HTTP operations to avoid hanging (LP: #349737)
1205+ - Clean up environment variables on startup to avoid propagating
1206+ variables that will corrupt package installation (LP: #348681)
1207+ - Clean up FDs on startup for the same reason (LP: #352458)
1208+ - Catch and handle certain errors from smart (such as invalid package
1209+ data) to avoid "stuck" Landscape activities (LP: #268745)
1210+ - Don't print warnings meant for developers to the console (LP: #336669)
1211+
1212+ -- Christopher Armstrong <radix@ubuntu.com> Thu, 09 Apr 2009 17:09:50 -0400
1213+
1214+landscape-client (1.0.28-0ubuntu1.9.04.0) jaunty; urgency=low
1215+
1216+ * Fix minor packaging issues in last release (LP: #343954)
1217+ - Version number in landscape.VERSION is now correct
1218+ - Fixed package version number to maintain convention
1219+ * The following changes are in the 1.0.28 release:
1220+ - Invalidate package cache when server UUID changes (LP: #339948)
1221+ - Improve the "cloud mode" introduced in 1.0.26 to send more
1222+ disambiguation data (LP: #343942) and allow the EC2 user data to specify
1223+ the exchange and ping URLs (LP: #343947)
1224+ - Allow importing of initial configurations (along with public SSL
1225+ certificates) when running landscape-config (LP: #341705)
1226+ - Support a non-root mode which allows running the client without the
1227+ management functionality (LP: #82159)
1228+ - Automatic cloud registration when there's no user-data to specify an OTP
1229+ now works (LP: #344323)
1230+
1231+ -- Christopher Armstrong <radix@ubuntu.com> Thu, 19 Mar 2009 09:52:03 -0400
1232+
1233+landscape-client (1.0.28-0ubuntu1) jaunty; urgency=low
1234+
1235+ * New upstream release. (LP: #343954)
1236+
1237+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 18 Mar 2009 20:42:05 +0100
1238+
1239+landscape-client (1.0.26.1-0ubuntu0.9.04) jaunty; urgency=low
1240+
1241+ * Build for python2.6, include the symlinks in the package.
1242+
1243+ -- Matthias Klose <doko@ubuntu.com> Wed, 25 Feb 2009 12:03:23 +0000
1244+
1245+landscape-client (1.0.26-0ubuntu0.9.04) jaunty; urgency=low
1246+
1247+ * New upstream release (LP: #328151)
1248+
1249+ -- Christopher Armstrong <radix@ubuntu.com> Wed, 11 Feb 2009 17:00:54 +0000
1250+
1251+landscape-client (1.0.25-0ubuntu0.9.04) jaunty; urgency=low
1252+
1253+ * New upstream release supporting custom graphs (LP: #306360)
1254+ - Multiple custom graphs can be used at the same time (LP: #307314)
1255+ - PATH is now set for scripts in script execution (LP: #257018)
1256+ * debian/landscape-common.postinst: Only chown parts of /var/lib/landscape
1257+ because we now store files in it that should maintain their ownership
1258+ (LP: #307321).
1259+ * debian/landscape-client.postinst: Work around chfn/system user problem
1260+ by not specifying a --gecos (LP: #238755)
1261+ * debian/landscape-client.logrotate: logrotate no longer reports spurious
1262+ errors when the client isn't running (LP: #271767)
1263+
1264+ -- Christopher Armstrong <radix@ubuntu.com> Thu, 11 Dec 2008 17:11:08 -0800
1265+
1266+landscape-client (1.0.23-0ubuntu0.8.10.1) intrepid; urgency=low
1267+
1268+ * debian/control: Update Replaces to < 1.0.23-0ubuntu0.8.10 to correctly
1269+ replace newer unsplit versions of the landscape package (LP: #285030).
1270+
1271+ -- Christopher Armstrong <radix@ubuntu.com> Fri, 17 Oct 2008 12:42:23 -0400
1272+
1273+landscape-client (1.0.23-0ubuntu0.8.10) intrepid; urgency=low
1274+
1275+ * New upstream release. (LP: #277658):
1276+ Changes since 1.0.21.1:
1277+ - Don't print duplicate warnings when / is nearing capacity in sysinfo
1278+ (LP: #260230).
1279+ - Slight change to link text in landscape-sysinfo.
1280+ - Don't crash badly when programs are run as the incorrect user
1281+ (LP: #268879).
1282+ * debian/changelog: New debian-version scheme including Ubuntu version. The
1283+ same upstream version is available for all supported releases.
1284+ (LP: #277682).
1285+ * debian/landscape-client.postrm: Delete log and data files upon purge
1286+ (LP: #121182).
1287+ * debian/landscape-common.postrm: Delete the sysinfo logs upon purge.
1288+
1289+ -- Christopher Armstrong <radix@ubuntu.com> Thu, 09 Oct 2008 11:40:51 -0400
1290+
1291+landscape-client (1.0.21.1-0ubuntu2) intrepid; urgency=low
1292+
1293+ * debian/control: fix bzr url
1294+ * debian/landscape-sysinfo.wrapper: print a timestamp before the sysinfo
1295+ data to ensure appropriate context (LP: #270862)
1296+
1297+ -- Dustin Kirkland <kirkland@ubuntu.com> Tue, 30 Sep 2008 17:13:18 -0500
1298+
1299+landscape-client (1.0.21.1-0ubuntu1) intrepid; urgency=low
1300+
1301+ * New upstream version:
1302+ * Add ok-no-register option to landscape-config script to not fail if
1303+ dbus isn't started or landscape-client isn't running.
1304+ * lower timeout related to package management in landscape.
1305+ * debian/control: Depend on cron.
1306+ * debian/landscape-client.postinst: use ok-no-register option so that the
1307+ postinst script doesn't fail when run from the installer. (LP: #274573).
1308+
1309+ -- Mathias Gug <mathiaz@ubuntu.com> Thu, 25 Sep 2008 17:54:00 -0400
1310+
1311+landscape-client (1.0.21-0ubuntu2) intrepid; urgency=low
1312+
1313+ * debian/rules: Install an hourly cron job to update smart package data.
1314+ Thanks to Christopher Armstrong (LP: #268765).
1315+ * debian/control:
1316+ - Move ${misc:Depends} to Depends.
1317+ - Add VCS-* headers.
1318+ * debian/landscape-client.postrm:
1319+ - remove /etc/default/landscape-client when the package is purged.
1320+
1321+ -- Mathias Gug <mathiaz@ubuntu.com> Tue, 23 Sep 2008 18:19:26 -0400
1322+
1323+landscape-client (1.0.21-0ubuntu1) intrepid; urgency=low
1324+
1325+ [ Christopher Armstrong ]
1326+ * New upstream release (LP: #271886):
1327+ - Bug fix release:
1328+ - Avoid the PotentialZombieWarning on landscape-client startup.
1329+ (LP: #257346)
1330+ - When run as root, read sysinfo configuration from /etc and and write
1331+ logs to /var/log instead of /root. (LP: #268560)
1332+ - Avoid ZeroDivisionErrors when /home is an autofs. (LP: #269634)
1333+ - Don't corrupt a pid file when trying to start the client when it's
1334+ already running. (LP: #269634)
1335+ - Remove the pid file when shutting down the client. (LP: #257081)
1336+
1337+ [ Mathias Gug ]
1338+ * debian/landscape-client.init: specify the pid file and use --startas
1339+ instead of --exec when starting landscape-client so that the init script
1340+ doesn't fail if landscape-client is already running.
1341+
1342+ -- Mathias Gug <mathiaz@ubuntu.com> Fri, 19 Sep 2008 17:28:08 -0400
1343+
1344+landscape-client (1.0.18-0ubuntu4) intrepid; urgency=low
1345+
1346+ [ Christopher Armstrong ]
1347+ * debian/landscape-common.postinst: Don't blow up when the landscape-sysinfo
1348+ symlinks already exist (LP: #270131)
1349+
1350+ [ Mathias Gug ]
1351+ * debian/landscape-common.postinst, debian/landscape-common.prerm: don't
1352+ call update-motd init script as it's no longer available in the
1353+ update-motd package. Call directly /usr/sbin/update-motd instead.
1354+ (LP: #271854)
1355+
1356+ -- Mathias Gug <mathiaz@ubuntu.com> Thu, 18 Sep 2008 16:47:08 -0400
1357+
1358+landscape-client (1.0.18-0ubuntu3) intrepid; urgency=low
1359+
1360+ * debian/control: Add Replaces for landscape-common since
1361+ landscape-sysinfo has been moved from -client to -common.
1362+
1363+ -- Mathias Gug <mathiaz@ubuntu.com> Tue, 16 Sep 2008 17:16:50 -0400
1364+
1365+landscape-client (1.0.18-0ubuntu2) intrepid; urgency=low
1366+
1367+ [ Mathias Gug ]
1368+ * Split the package into two packages:
1369+ - landscape-common: has the python libraries and the landscape-sysinfo
1370+ command. A landscape account is not required to use this package.
1371+ - landscape-client: has all the binaries required to run the
1372+ landscape-client. Requires a landscape account.
1373+ - debian/control:
1374+ + move some dependencies to landscape-client so that
1375+ landscape-common doesn't install unecessary packages in the
1376+ default -server install.
1377+ + move python-gobject to a Pre-Depends so that landscape-config can
1378+ register the system during the postinst (LP: #268838).
1379+ * debian/control:
1380+ - depend on python-smartpm instead of smartpm-core.
1381+ * debian/landscape-client.postrm: delete /etc/landscape/client.conf when
1382+ the package is purged.
1383+ * debian/landscape-client.postinst: remove sysinfo_in_motd debconf question
1384+ as it wasn't used.
1385+
1386+ [ Christopher Armstrong ]
1387+ * Fixes for (LP: #268352).
1388+ - scripts/landscape-sysinfo.wrapper: New script to run landscape-sysinfo
1389+ with leading whitespace.
1390+ - debian/rules: Install wrapper into /usr/share/landscape.
1391+ - debian/landscape-client.postinst: Link wrapper into place.
1392+
1393+ -- Mathias Gug <mathiaz@ubuntu.com> Mon, 15 Sep 2008 17:21:53 -0400
1394+
1395+landscape-client (1.0.18-0ubuntu1) intrepid; urgency=low
1396+
1397+ * New upstream release
1398+
1399+ -- Rick Clark <rick.clark@ubuntu.com> Mon, 08 Sep 2008 16:35:57 -0500
1400+
1401+landscape-client (1.0.17-0ubuntu1) intrepid; urgency=low
1402+
1403+ [ Dustin Kirkland and Rick Clark ]
1404+ * debian/compat: updated to 6.
1405+ * debian/config: initial debconf config.
1406+ * debian/control: reformatted depends and changed smartpm-core version;
1407+ changed Standards-Version to 3.8.0; added adduser to depends as needed by
1408+ postinst and postrm; updates smartpm-core dep to >1.0; moved most build
1409+ deps to Build-Depends-Indep; add po-debconf build dependency; added
1410+ debconf hooks for installing landscape-sysinfo as an update-motd or
1411+ profile.d script.
1412+ * debian/copyright: updated copyright date; removed incorrect symlink to
1413+ GPL-3; added Dustin and Rick to the packaging credits.
1414+ * debian/landscape-client.init: removed S from stop; rewritten to be more
1415+ lsb/Debian compliant; added status action; fixed whitespacing
1416+ inconsistency; use $NAME whenever possible; comment why we're not using
1417+ status_of_proc().
1418+ * debian/landscape-client.lintian-overrides: added with two overrides
1419+ * debian/landscape-client.overrides: removed.
1420+ * debian/landscape-client.prerm: initial creation, remove landscape-sysinfo
1421+ update-motd or profile.d script, if any exists.
1422+ * debian/landscape-client.postinst: fixed deprecated chmod call; changed
1423+ home dir of landscape user; removed uneeded update-rc.d; added code to
1424+ handle debconf; created a function for retrieving values from ini config;
1425+ /usr/share/debconf/comfmodule to top of postinst; add db_stop back in.
1426+ * debian/landscape-client.postrm: added debhelper tag.
1427+ * debian/rules: added po debconf bits for translation; depend on update-motd.
1428+ * debian/pycompat: initial creation.
1429+ * debian/po/POTFILES.in, debian/po/templates.pot: initial creation.
1430+ * man/txt2man, man/*.txt: removed; manpages should *really* be in native
1431+ format.
1432+ * man/landscape-client.1, man/landscape-config.1, man/landscape-message.1:
1433+ manpages in roff format, initially created by txt2man, some minor tweaks
1434+ to the title and such.
1435+
1436+ [ Gustavo Niemeyer ]
1437+ * New Upstream release
1438+ * Fix copyright dates in debian/copyright
1439+ * fix the chown call to use a colon
1440+ * Fixed missing $PACKAGES variable in postinst
1441+ * Implemented support for configuration the computer title via debconf
1442+
1443+ [ Kees Cook ]
1444+ * removed unused debian/autoppa-switch.
1445+ * fixed debian/landscape-client.init to run log_end_msg in the right place.
1446+ * debian/landscape-client.postrm: rewrote to allow debhelper to do its
1447+ job, fixed deluser call.
1448+ * debian/landscape-client.postinst: rewrote to allow debhelper to do its
1449+ job, fixed use of adduser.
1450+ * debian/rules: use "install" instead of "cp", dropped lintian overrides.
1451+ * debian/changelog: drop redundant changelog entries.
1452+
1453+ [ Rick Clark ]
1454+ * removed .override file
1455+ * removed .autoppa files
1456+
1457+ -- Dustin Kirkland <kirkland@ubuntu.com> Thu, 04 Sep 2008 13:28:14 -0500
1458+
1459+landscape-client (1.0.16-intrepid1-landscape1) intrepid; urgency=low
1460+
1461+ * landscape-config can now be run in a non-interactive mode
1462+
1463+ -- Andreas Hasenack <andreas@canonical.com> Fri, 8 Aug 2008 14:34:43 +0000
1464+
1465+landscape-client (1.0.15-intrepid1-landscape1) intrepid; urgency=low
1466+
1467+ * introduce a basic landscape-sysinfo tool
1468+ * properly report a script execution error if its exit status is not
1469+ zero
1470+
1471+ -- Andreas Hasenack <andreas@canonical.com> Thu, 7 Aug 2008 18:33:41 +0000
1472+
1473+landscape-client (1.0.14-intrepid1-landscape1) intrepid; urgency=low
1474+
1475+ * fixed some dbus errors in some of the supported distributions
1476+ * added restart/shutdown plugin
1477+ * scripts can now have accented characters in them
1478+
1479+ -- Andreas Hasenack <andreas@canonical.com> Thu, 24 Jul 2008 13:06:34 +0000
1480+
1481+landscape-client (1.0.13-hardy1-landscape1) hardy; urgency=low
1482+
1483+ * the timestamp in the error message from processkiller.py is now
1484+ formatted properly
1485+ * the process list sent to the server was only being updated for new
1486+ processes, and not when existing processes changed
1487+ * in script execution, a timeout error is now reported with a proper
1488+ error message instead of just a generic failure in the script
1489+
1490+ -- Andreas Hasenack <andreas@canonical.com> Thu, 10 Jul 2008 14:24:15 +0000
1491+
1492+landscape-client (1.0.12-hardy1-landscape1) hardy; urgency=low
1493+
1494+ * the sleep average value of a process is no longer provided by recent
1495+ kernels. The client now computes and sends the CPU usage instead.
1496+ * initial directory for script execution is now the target user's home
1497+ directory and, if that is unavailable, /. Previously it was /root.
1498+ * new user creation was ignoring some extra fields such as Location and
1499+ phone numbers
1500+ * the machine uptime was incorrectly reported after a logrotate run and if
1501+ there was no reboot afterwards. This affected the process listing page in
1502+ the web interface, where processes would show up as having been started
1503+ around 1970.
1504+
1505+ -- Andreas Hasenack <andreas@canonical.com> Thu, 26 Jun 2008 16:17:59 +0000
1506+
1507+landscape-client (1.0.11-hardy1-landscape1) hardy; urgency=low
1508+
1509+ * fixed a regression where an important fix was missing from the
1510+ new staging branch
1511+
1512+ -- Andreas Hasenack <andreas@canonical.com> Fri, 13 Jun 2008 14:45:08 +0000
1513+
1514+landscape-client (1.0.10-hardy1-landscape1) hardy; urgency=low
1515+
1516+ * Change the utilisation of the csv module to be compatible with
1517+ python 2.4 as used in Dapper.
1518+
1519+ -- Andreas Hasenack <andreas@canonical.com> Thu, 12 Jun 2008 17:58:05 +0000
1520+
1521+landscape-client (1.0.9-hardy1-landscape1) hardy; urgency=low
1522+
1523+ * restrict users and groups list to local ones only, i.e., /etc/passwd
1524+ and /etc/group
1525+ * fixed some tests that were failing in locales other than english
1526+
1527+ -- Andreas Hasenack <andreas@canonical.com> Wed, 11 Jun 2008 15:16:12 +0000
1528+
1529+landscape-client (1.0.4-hardy1-landscape1) hardy; urgency=low
1530+
1531+ * fixed permissions and ownership of some files and directories which could
1532+ prevent package data from being uploaded to the Landscape server
1533+ * fixed a problem where the root user password could not be changed
1534+ * the watchdog.log log file is now also rotated
1535+
1536+ -- Andreas Hasenack <andreas@canonical.com> Wed, 16 Apr 2008 17:21:20 +0000
1537+
1538+landscape-client (1.0-hardy1-landscape4) hardy; urgency=low
1539+
1540+ * Memory consumption has is improved. The client's functionality is
1541+ now broken up into a number of sub-processes. Functionality that
1542+ would previously use or leak memory, such as package management,
1543+ run in independent processes that exit when they complete so the
1544+ OS can reclaim the memory.
1545+ * Security is improved with this design. Monitoring plugins run as
1546+ the unpriviledged landscape user while management functions run as
1547+ root.
1548+ * Secure inter-process communication occurs over DBUS.
1549+
1550+ -- Michel Pelletier <pelletier.michel@gmail.com> Wed, 27 Feb 2008 22:57:21 +0000
1551+
1552+landscape-client (0.17.0-hardy1-landscape1) hardy; urgency=low
1553+
1554+ * The client now reports the primary group for users. I can also
1555+ modify it when requested by the server (#122212).
1556+
1557+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Wed, 21 Nov 2007 19:14:29 +0000
1558+
1559+landscape-client (0.16.0-hardy1-landscape1) hardy; urgency=low
1560+
1561+ * The client no longer schedules an urgent exchange if it detects
1562+ that the server has not processed any messages in its most recent
1563+ exchange (#138135).
1564+ * The total number of pending messages are sent to the server to
1565+ make it possible to generate backlog statistics (#162733).
1566+
1567+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Wed, 14 Nov 2007 23:09:58 +0000
1568+
1569+landscape-client (0.15.0-gutsy1-landscape1) gutsy; urgency=low
1570+
1571+ * Support for http_proxy and https_proxy variables in the
1572+ configuration file and in the interactive setup, as well as
1573+ --http-proxy and --https-proxy parameters is available (#151690).
1574+ * The client gracefully fails when unknown request-ids for
1575+ package-related operations are received (#151085).
1576+ * Child devices that have been removed are not reported when one of
1577+ their ancestors is also reported for deletion by the hardware
1578+ inventory plugin (#136497).
1579+
1580+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 26 Oct 2007 23:23:20 +0000
1581+
1582+landscape-client (0.14.0-gutsy1-landscape1) gutsy; urgency=low
1583+
1584+ * Failures that would occur is a user wasn't in the shadow file are
1585+ fixed (#102071).
1586+ * Whitespace surrounding process command-line names is removed
1587+ before they are reported to the server (#149112).
1588+ * Test failures, some related to DBUS on gutsy, are fixed.
1589+
1590+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 25 Oct 2007 00:03:06 +0000
1591+
1592+landscape-client (0.13.0-gutsy1-landscape1) gutsy; urgency=low
1593+
1594+ * When unknown package IDs are sent by the server message handling
1595+ is postponed until the client is aware of the unknown IDs
1596+ (#128796).
1597+
1598+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Wed, 17 Oct 2007 17:36:11 +0000
1599+
1600+landscape-client (0.12.2-gutsy1-landscape1) gutsy; urgency=low
1601+
1602+ * The client now reports it's version correctly.
1603+
1604+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 11 Oct 2007 21:32:24 +0000
1605+
1606+landscape-client (0.12.1-gutsy1-landscape1) gutsy; urgency=low
1607+
1608+ * A critical bug that would break configure-landscape is fixed.
1609+
1610+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 9 Oct 2007 21:10:02 +0000
1611+
1612+landscape-client (0.12.0-gutsy1-landscape7) gutsy; urgency=low
1613+
1614+ * Fixed typo in version string.
1615+
1616+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Sat, 6 Oct 2007 00:49:10 +0000
1617+
1618+landscape-client (0.12.0-gutsy1-landscape6) gutsy; urgency=low
1619+
1620+ * Updated Depends to require new smartpm-core 0.52 packages.
1621+
1622+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 5 Oct 2007 23:23:17 +0000
1623+
1624+landscape-client (0.12.0-gutsy1-landscape5) gutsy; urgency=low
1625+
1626+ * No upstream changes. New package build.
1627+
1628+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 4 Oct 2007 22:35:50 +0000
1629+
1630+landscape-client (0.12.0-gutsy1-landscape4) gutsy; urgency=low
1631+
1632+ * Updated package requires current version of smartpm-core.
1633+
1634+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 2 Oct 2007 21:37:56 +0000
1635+
1636+landscape-client (0.11.0-gutsy1-landscape1) gutsy; urgency=low
1637+
1638+ * The full command name for a process, where retrievable, is
1639+ reported to the server instead of just the first 16 characters
1640+ (#131878).
1641+ * The historic process plugin, unused for months, has been removed
1642+ (#134122).
1643+ * A new landscape-message command-line program is available. It
1644+ allows administrators to send messages from a console that end up
1645+ in the account history (#125083).
1646+ * The landscape-client.log file is now logrotated regularly
1647+ (#78494).
1648+
1649+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 13 Sep 2007 00:05:43 +0000
1650+
1651+landscape-client (0.10.15-gutsy1-landscape1) gutsy; urgency=low
1652+
1653+ * THIS IS A TEST BUILD!
1654+ * The full command name, where retrievable, is reported to the
1655+ server instead of just the first 16 characters (#131878).
1656+ * The historic process plugin, unused for months, has been removed
1657+ (#134122).
1658+ * A new landscape-message command-line program is available. It
1659+ allows administrators to send messages from a console that end up
1660+ in the account history (#125083).
1661+ * The landscape-client.log file is now logrotated regularly
1662+ (#78494).
1663+
1664+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Wed, 12 Sep 2007 22:48:19 +0000
1665+
1666+landscape-client (0.10.12-1ubuntu1) feisty; urgency=low
1667+
1668+ * New upstream release.
1669+ * Package Depends updated to use new smartpm-0.51-landscape4
1670+ package. This makes the package installable on Ubuntu systems
1671+ with only the main repository enabled.
1672+
1673+ -- Landscape Team <landscape-team@canonical.com> Tue, 7 Aug 2007 16:08:00 -0700
1674+
1675+landscape-client (0.10.11-1ubuntu1) feisty; urgency=low
1676+
1677+ * New upstream release.
1678+ * A bug related to package dependency reporting that would cause two
1679+ approvals for and upgrade package request has been fixed.
1680+ * Errors with the ping server are logged clearly now.
1681+ * A crashing postinit-related bug is fixed.
1682+
1683+ -- Landscape Team <landscape-team@canonical.com> Fri, 3 Aug 2007 19:15:00 -0700
1684+
1685+landscape-client (0.10.10-1ubuntu1) feisty; urgency=low
1686+
1687+ * New upstream release.
1688+ * CA certificates are no longer hard-coded. The default set of CAs
1689+ in the system are used instead.
1690+ * The client connects to the server immediately when it detects
1691+ changes in packages and users. This dramatically reduces the
1692+ turn-around time of some operations.
1693+ * The new user and group change detection reports detailed
1694+ information to the server about changes made external to the
1695+ client, such as by local users.
1696+ * The client reports detailed information about the outcome of user
1697+ and group operations.
1698+ * The client has support for a new synchronization system. If
1699+ either the server or client detect inconsistencies in the data
1700+ they have they can request a synchronization to get back in sync.
1701+ * The client has support to calculate and report package upgrades.
1702+ * The hostname is reported when clients first register with the
1703+ server.
1704+ * A new configure-landscape script eases registration including
1705+ automated and interactive registration modes.
1706+ * The client includes VM size and sleep average in active process
1707+ data.
1708+
1709+ -- Landscape Team <landscape-team@canonical.com> Thu, 28 Jun 2007 16:19:00 -0700
1710+
1711+landscape-client (0.10.9-1ubuntu1) feisty; urgency=low
1712+
1713+ * New upstream release.
1714+ * Package depends on python-gdbm to install correctly on systems
1715+ without it.
1716+
1717+ -- Landscape Team <landscape-team@canonical.com> Fri, 8 Jun 2007 11:02:00 -0700
1718+
1719+landscape-client (0.10.8-1ubuntu1) feisty; urgency=low
1720+
1721+ * New upstream release.
1722+ * The changes that included the new configure-landscape helper
1723+ script have been removed. They were not quite ready for release.
1724+ * Added python-twisted-web to Debian package Depends to satisfy
1725+ dependencies introduced by the new ping plugin.
1726+
1727+ -- Landscape Team <landscape-team@canonical.com> Thu, 7 Jun 2007 11:03:00 -0700
1728+
1729+landscape-client (0.10.7-1ubuntu1) feisty; urgency=low
1730+
1731+ * New upstream release.
1732+ * Package depends on new smartpm-core package which installs
1733+ correctly on dapper.
1734+
1735+ -- Landscape Team <landscape-team@canonical.com> Wed, 6 Jun 2007 10:37:00 -0700
1736+
1737+landscape-client (0.10.6-1ubuntu1) feisty; urgency=low
1738+
1739+ * New upstream release.
1740+ * Mispelled smartpm-core version is fixed.
1741+
1742+ -- Landscape Team <landscape-team@canonical.com> Mon, 1 Jun 2007 10:48:00 -0700
1743+
1744+landscape-client (0.10.5-1ubuntu1) feisty; urgency=low
1745+
1746+ * New upstream release.
1747+ * Mismatched operation status codes are fixed.
1748+
1749+ -- Landscape Team <landscape-team@canonical.com> Thu, 31 May 2007 15:36:00 -0700
1750+
1751+landscape-client (0.10.4-1ubuntu1) feisty; urgency=low
1752+
1753+ * New upstream release.
1754+ * Links to a new version of smart with a fixed crontab entry.
1755+
1756+ -- Landscape Team <landscape-team@canonical.com> Tue, 22 May 2007 23:29:00 -0700
1757+
1758+landscape-client (0.10.3-1ubuntu1) feisty; urgency=low
1759+
1760+ * New upstream release.
1761+ * A bug related to bpickle conversions with float-point values is
1762+ fixed (#114829).
1763+
1764+ -- Landscape Team <landscape-team@canonical.com> Mon, 15 May 2007 16:31:00 -0700
1765+
1766+landscape-client (0.10.2-1ubuntu1) feisty; urgency=low
1767+
1768+ * New upstream release.
1769+ * New package includes previously missing package management plugin.
1770+
1771+ -- Landscape Team <landscape-devel@lists.canonical.com> Fri, 11 May 2007 10:20:00 -0700
1772+
1773+landscape-client (0.10.1-1ubuntu1) feisty; urgency=low
1774+
1775+ * New upstream release.
1776+ * Minor fix in package management plugin timings.
1777+
1778+ -- Landscape Team <landscape-devel@lists.canonical.com> Thu, 10 May 2007 10:00:00 -0700
1779+
1780+landscape-client (0.10.0-1ubuntu1) feisty; urgency=low
1781+
1782+ * New upstream release.
1783+ * Basic package management operations are now supported. The client
1784+ reports package information to the server and can install and/or
1785+ remove packages.
1786+ * The client uses the new operations system. Support for the now
1787+ unused action info system is gone.
1788+ * A minor bpickle bug was fixed.
1789+
1790+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Mon, 7 May 2007 20:16:00 -0700
1791+
1792+landscape-client (0.9.6-1ubuntu1) feisty; urgency=low
1793+
1794+ * New upstream release.
1795+ * Bugs related to the handling of DBus types are fixed on feisty.
1796+
1797+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 13 Apr 2007 18:06:10 -0700
1798+
1799+landscape-client (0.9.5-1ubuntu1) feisty; urgency=low
1800+
1801+ * New upstream release.
1802+ * Old-school and oddly formatted GECOS fields are handled correctly.
1803+
1804+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 30 Mar 2007 16:50:49 -0400
1805+
1806+landscape-client (0.9.4-1ubuntu1) feisty; urgency=low
1807+
1808+ * New upstream release.
1809+ * Change architecture to all.
1810+
1811+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 30 Mar 2007 12:46:23 -0400
1812+
1813+landscape-client (0.9.3-1ubuntu1) feisty; urgency=low
1814+
1815+ * New upstream release.
1816+ * Add override file.
1817+ * Bump application and package versions.
1818+
1819+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 29 Mar 2007 17:21:50 -0400
1820+
1821+landscape-client (0.9.2-1ubuntu1) feisty; urgency=low
1822+
1823+ * Bump debhelper version.
1824+ * Build-Depend on python-dev, lsb-release.
1825+ * Pre-Depend on debconf | debconf-2.0.
1826+ * Move ${python:Depends} to Depends.
1827+ * Make the packaging compatible with dapper and newer distro releases.
1828+
1829+ -- Matthias Klose <doko@ubuntu.com> Wed, 28 Mar 2007 21:21:20 +0200
1830+
1831+landscape-client (0.9.2-1) unstable; urgency=low
1832+
1833+ * New upstream release.
1834+ * Really fixed package.
1835+
1836+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 21 Mar 2007 09:57:00 -0400
1837+
1838+landscape-client (0.9.1-3) unstable; urgency=low
1839+
1840+ * Really fixed package.
1841+
1842+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 20 Mar 2007 16:35:00 -0400
1843+
1844+landscape-client (0.9.1-2) unstable; urgency=low
1845+
1846+ * Fixed package.
1847+
1848+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 20 Mar 2007 16:25:00 -0400
1849+
1850+landscape-client (0.9.1-1) unstable; urgency=low
1851+
1852+ * New upstream release.
1853+ * bpickle encoding format has changed in a non-backwards compatible
1854+ way to fix float encoding-related problems.
1855+ * API version updated to 2.0.
1856+
1857+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 20 Mar 2007 15:06:17 -0400
1858+
1859+landscape-client (0.9.0-1) unstable; urgency=low
1860+
1861+ * New upstream release.
1862+ * Group-management related tasks such as add/remove member and
1863+ create group are now supported.
1864+ * Client reports hardware inventory information to the server.
1865+ * Unicode handling with regards to the passwd file is improved.
1866+
1867+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 9 Mar 2007 16:04:51 -0800
1868+
1869+landscape-client (0.8.1-1) unstable; urgency=low
1870+
1871+ * New upstream release.
1872+ * Account registration log message no longer exposes account
1873+ password.
1874+
1875+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 18 Jan 2007 23:07:00 -0800
1876+
1877+landscape-client (0.8.0-1) unstable; urgency=low
1878+
1879+ * New upstream release.
1880+ * Process monitoring logic stops trying to restart the client if too
1881+ many restarts occur during a short period of time.
1882+ * Client includes an SSL certificate to verify the server with.
1883+ * Package depends on python2.4-pycurl, which is necessary for the
1884+ new SSL support.
1885+
1886+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 18 Jan 2007 10:48:00 -0800
1887+
1888+landscape-client (0.7.0-1) unstable; urgency=low
1889+
1890+ * New upstream release.
1891+ * Client can daemonize itself and perform basic process monitoring.
1892+ * Client writes a useful log now. Command-line options have been
1893+ added to control log verbosity.
1894+ * Package depends on perl-modules, which is necessary for bare-bones
1895+ server installs.
1896+
1897+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Tue, 2 Jan 2007 12:54:00 -0800
1898+
1899+landscape-client (0.6.1-1) unstable; urgency=low
1900+
1901+ * User management plugin handles extra Ubuntu user fields.
1902+
1903+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 15 Dec 2006 10:22:00 -0800
1904+
1905+landscape-client (0.6.0-2) unstable; urgency=low
1906+
1907+ * Reverted to deprecated build rule to fix package breakage on
1908+ dapper.
1909+
1910+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Thu, 7 Dec 2006 10:54:00 -0800
1911+
1912+landscape-client (0.6.0-1) unstable; urgency=low
1913+
1914+ * New upstream release.
1915+ * The active-process-info plugin provides server-controllable
1916+ end/kill actions.
1917+ * Messages are no longer delivered twice if a broken message gets
1918+ into the message store.
1919+
1920+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Wed, 6 Dec 2006 14:47:00 -0800
1921+
1922+landscape-client (0.5.0-1) unstable; urgency=low
1923+
1924+ * New upstream release.
1925+ * Client-to-server exchanges now happen in a thread to avoid
1926+ blocking monitoring plugins.
1927+ * Problems that caused slow client registration have been fixed.
1928+ * The computer-info plugin now reports information about the
1929+ distribution installed on a machine.
1930+
1931+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 10 Nov 2006 12:47:00 -0800
1932+
1933+landscape-client (0.4.0-1) unstable; urgency=low
1934+
1935+ * New upstream release.
1936+ * Disk, load, memory/swap and temperature data is now reported at
1937+ 300s-aligned intervals.
1938+ * Improvements to registration system.
1939+ * Improvements to plugin infrastructure.
1940+
1941+ -- Jamshed Kakar <jamshed.kakar@canonical.com> Fri, 13 Oct 2006 09:25:00 -0300
1942+
1943+landscape-client (0.3.0-1) unstable; urgency=low
1944+
1945+ * New upstream release.
1946+ * Major reorganization of client code.
1947+
1948+ -- Christopher Armstrong <radix@canonical.com> Tue, 22 Aug 2006 09:56:00 -0400
1949+
1950+landscape-client (0.2.5-1) unstable; urgency=low
1951+
1952+ * New upstream release.
1953+ * Fix a bug in the newly introduced client upgrade machinery.
1954+
1955+ -- Christopher Armstrong <radix@canonical.com> Wed, 4 Aug 2006 10:45:00 -0500
1956+
1957+landscape-client (0.2.4-1) unstable; urgency=low
1958+
1959+ * New upstream release.
1960+ * User management should now be working.
1961+
1962+ -- Christopher Armstrong <radix@canonical.com> Wed, 3 Aug 2006 15:12:00 -0500
1963+
1964+landscape-client (0.2.3-1) unstable; urgency=low
1965+
1966+ * New upstream release.
1967+ * Fixed a bug in the init script preventing landscape-client from
1968+ starting after reboots.
1969+
1970+ -- Christopher Armstrong <radix@canonical.com> Wed, 26 Jul 2006 15:47:00 -0500
1971+
1972+landscape-client (0.2.2-1) unstable; urgency=low
1973+
1974+ * New upstream release.
1975+
1976+ -- Christopher Armstrong <radix@canonical.com> Thu, 6 Jul 2006 18:38:00 -0500
1977+
1978+landscape-client (0.2.1-1) unstable; urgency=low
1979+
1980+ * Added support for debconf.
1981+
1982+ -- Gustavo Niemeyer <gustavo@niemeyer.net> Wed, 5 Jul 2006 14:13:25 -0300
1983+
1984+landscape-client (0.2.0-1) unstable; urgency=low
1985+
1986+ * Initial (internal) release.
1987+
1988+ -- Christopher Armstrong <radix@canonical.com> Wed, 28 Jun 2006 14:32:30 -0500
1989+
1990+landscape-client (0.1) dapper; urgency=low
1991+
1992+ * Empty placeholder package
1993+
1994+ -- Matt Zimmerman <mdz@ubuntu.com> Fri, 26 May 2006 06:37:55 -0700
1995
1996=== added file 'debian/cloud-default.conf'
1997--- debian/cloud-default.conf 1970-01-01 00:00:00 +0000
1998+++ debian/cloud-default.conf 2012-04-22 14:14:27 +0000
1999@@ -0,0 +1,7 @@
2000+[client]
2001+cloud = True
2002+url = https://landscape.canonical.com/message-system
2003+data_path = /var/lib/landscape/client
2004+ping_url = http://landscape.canonical.com/ping
2005+include_manager_plugins = ScriptExecution
2006+script_users = ALL
2007
2008=== added file 'debian/compat'
2009--- debian/compat 1970-01-01 00:00:00 +0000
2010+++ debian/compat 2012-04-22 14:14:27 +0000
2011@@ -0,0 +1,1 @@
2012+5
2013
2014=== added file 'debian/control'
2015--- debian/control 1970-01-01 00:00:00 +0000
2016+++ debian/control 2012-04-22 14:14:27 +0000
2017@@ -0,0 +1,76 @@
2018+Source: landscape-client
2019+Section: admin
2020+Priority: optional
2021+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
2022+XSBC-Original-Maintainer: Landscape Team <landscape-team@canonical.com>
2023+Build-Depends: debhelper (>= 5), po-debconf, python-dev, lsb-release, gawk, python-twisted-core, python-distutils-extra
2024+Standards-Version: 3.8.0
2025+XS-Python-Version: >= 2.4, << 2.8
2026+
2027+Package: landscape-common
2028+Architecture: any
2029+Depends: ${python:Depends}, ${misc:Depends}, ${extra:Depends},
2030+ python-gnupginterface,
2031+ python-twisted-core,
2032+ python-apt,
2033+ ca-certificates,
2034+ python-gdbm,
2035+ lsb-release,
2036+ lsb-base,
2037+ adduser,
2038+ bc,
2039+ lshw
2040+Suggests: ${extra:Suggests}
2041+Replaces: landscape-client (<= 1.0.23-0ubuntu0.8.10)
2042+Description: The Landscape administration system client - Common files
2043+ Landscape is a web-based tool for managing Ubuntu systems. This
2044+ package is necessary if you want your machine to be managed in a
2045+ Landscape account.
2046+ .
2047+ This package provides the core libraries.
2048+XB-Python-Version: ${python:Versions}
2049+
2050+Package: landscape-client
2051+Architecture: any
2052+Depends: ${python:Depends}, ${misc:Depends}, ${extra:Depends},
2053+ python-twisted-web,
2054+ python-twisted-names,
2055+ landscape-common (>= ${Source-Version})
2056+Suggests: ${extra:Suggests}
2057+Description: The Landscape administration system client
2058+ Landscape is a web-based tool for managing Ubuntu systems. This
2059+ package is necessary if you want your machine to be managed in a
2060+ Landscape account.
2061+ .
2062+ This package provides the Landscape client and requires a Landscape account.
2063+XB-Python-Version: ${python:Versions}
2064+
2065+Package: landscape-client-ui
2066+Architecture: any
2067+Depends: ${python:Depends}, ${misc:Depends},
2068+ landscape-client (>= ${Source-Version}),
2069+ landscape-client-ui-install (>= ${Source-Version}),
2070+ python-gi,
2071+ python-dbus,
2072+ policykit-1,
2073+ gir1.2-notify-0.7,
2074+ gir1.2-gtk-3.0
2075+Description: The Landscape administration system client - UI configuration
2076+ Landscape is a web-based tool for managing Ubuntu systems.
2077+ .
2078+ This package provides the Landscape client configuration UI.
2079+XB-Python-Version: ${python:Versions}
2080+
2081+Package: landscape-client-ui-install
2082+Architecture: any
2083+Depends: ${python:Depends}, ${misc:Depends},
2084+ python-gi,
2085+ python-dbus,
2086+ policykit-1,
2087+ gir1.2-gtk-3.0,
2088+ python-aptdaemon.gtk3widgets
2089+Description: The Landscape administration system client - UI installer
2090+ Landscape is a web-based tool for managing Ubuntu systems.
2091+ .
2092+ This package provides an automatic installer for landscape-client-ui.
2093+XB-Python-Version: ${python:Versions}
2094
2095=== added file 'debian/copyright'
2096--- debian/copyright 1970-01-01 00:00:00 +0000
2097+++ debian/copyright 2012-04-22 14:14:27 +0000
2098@@ -0,0 +1,36 @@
2099+This package was debianized by
2100+ * Jamshed Kakar <jamshed.kakar@canonical.com> on Wed, 28 Jun 2006
2101+ * Rick Clark <rick.clark@canonical.com> in Aug 2008
2102+ * Dustin Kirkland <kirkland@canonical.com> in Aug 2008
2103+
2104+ Copyright (C) 2006-2008 Canonical Ltd.
2105+
2106+License:
2107+
2108+Upstream source is located at: https://code.launchpad.net/landscape-client
2109+
2110+
2111+Copyright:
2112+
2113+The packaging of this software and the programs in this package are distributed
2114+under the terms of the GNU General Public License, version 2 as distributed by
2115+the Free Software Foundation.
2116+
2117+License:
2118+ Copyright (C) 2006-2008 Canonical Ltd.
2119+
2120+ This program is free software: you can redistribute it and/or modify
2121+ it under the terms of the GNU General Public License version 2,
2122+ as published by the Free Software Foundation.
2123+
2124+ This program is distributed in the hope that it will be useful,
2125+ but WITHOUT ANY WARRANTY; without even the implied warranty of
2126+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2127+ GNU General Public License for more details.
2128+
2129+ You should have received a copy of the GNU General Public License
2130+ along with this program. If not, see <http://www.gnu.org/licenses/>.
2131+
2132+On Debian systems, the complete text of the GNU General
2133+Public License can be found in `/usr/share/common-licenses/GPL-2'.
2134+
2135
2136=== added file 'debian/landscape-client-ui-install.install'
2137--- debian/landscape-client-ui-install.install 1970-01-01 00:00:00 +0000
2138+++ debian/landscape-client-ui-install.install 2012-04-22 14:14:27 +0000
2139@@ -0,0 +1,4 @@
2140+usr/bin/landscape-client-ui-install
2141+usr/share/applications/landscape-client-settings.desktop
2142+usr/share/icons/hicolor/scalable/apps/preferences-management-service.svg
2143+usr/share/locale
2144
2145=== added file 'debian/landscape-client-ui.install'
2146--- debian/landscape-client-ui.install 1970-01-01 00:00:00 +0000
2147+++ debian/landscape-client-ui.install 2012-04-22 14:14:27 +0000
2148@@ -0,0 +1,9 @@
2149+usr/bin/landscape-client-settings-mechanism
2150+usr/bin/landscape-client-registration-mechanism
2151+usr/bin/landscape-client-settings-ui
2152+usr/share/dbus-1/system-services/com.canonical.LandscapeClientSettings.service
2153+usr/share/dbus-1/system-services/com.canonical.LandscapeClientRegistration.service
2154+usr/share/polkit-1/actions/com.canonical.LandscapeClientSettings.policy
2155+etc/dbus-1/system.d/com.canonical.LandscapeClientSettings.conf
2156+etc/dbus-1/system.d/com.canonical.LandscapeClientRegistration.conf
2157+usr/share/glib-2.0/schemas/com.canonical.landscape-client-settings.gschema.xml
2158
2159=== added file 'debian/landscape-client.config'
2160--- debian/landscape-client.config 1970-01-01 00:00:00 +0000
2161+++ debian/landscape-client.config 2012-04-22 14:14:27 +0000
2162@@ -0,0 +1,64 @@
2163+#!/bin/sh
2164+
2165+PACKAGE=landscape-client
2166+
2167+CONFIGFILE=/etc/landscape/client.conf
2168+set -e
2169+. /usr/share/debconf/confmodule
2170+
2171+var_in_file() {
2172+ var="$1"
2173+ file="$2"
2174+ line=$(grep "^$var\s*=\s*" "$file" 2>/dev/null || true)
2175+ echo "$line"
2176+}
2177+
2178+get_var_from_file() {
2179+ var="$1"
2180+ file="$2"
2181+ val=$(grep "^$var\s*=\s*" "$file" 2>/dev/null | tail -n1 | sed "s/^.*=\s*//")
2182+ echo "$val"
2183+}
2184+
2185+update_var() {
2186+ var="$1"
2187+ file="$2"
2188+ line=$(var_in_file $var $file)
2189+ if [ -n "$line" ]; then
2190+ val=$(get_var_from_file $var $file)
2191+ # Store value from config file in debconf.
2192+ db_set $PACKAGE/$var $val
2193+ fi
2194+}
2195+
2196+# Load config file, if it exists.
2197+if [ -e $CONFIGFILE ]; then
2198+ # Config file is "ini" type, not shell, so we cannot source it
2199+ # If a setting is defined in the config file, update it in debconf
2200+ # db.
2201+ update_var "computer_title" "$CONFIGFILE"
2202+ update_var "account_name" "$CONFIGFILE"
2203+ update_var "registration_password" "$CONFIGFILE"
2204+ update_var "url" "$CONFIGFILE"
2205+ update_var "exchange_interval" "$CONFIGFILE"
2206+ update_var "urgent_exchange_interval" "$CONFIGFILE"
2207+ update_var "ping_url" "$CONFIGFILE"
2208+ update_var "ping_interval" "$CONFIGFILE"
2209+ update_var "http_proxy" "$CONFIGFILE"
2210+ update_var "https_proxy" "$CONFIGFILE"
2211+ update_var "tags" "$CONFIGFILE"
2212+fi
2213+
2214+# Ask questions.
2215+# Do debconf configuration
2216+db_get $PACKAGE/register_system
2217+if [ "$RET" = true ]; then
2218+ priority=high
2219+else
2220+ priority=medium
2221+fi
2222+db_input "$priority" $PACKAGE/computer_title || true
2223+db_input "$priority" $PACKAGE/account_name || true
2224+db_input "$priority" $PACKAGE/registration_password || true
2225+
2226+db_go || true
2227
2228=== added file 'debian/landscape-client.docs'
2229--- debian/landscape-client.docs 1970-01-01 00:00:00 +0000
2230+++ debian/landscape-client.docs 2012-04-22 14:14:27 +0000
2231@@ -0,0 +1,1 @@
2232+README
2233
2234=== added file 'debian/landscape-client.init'
2235--- debian/landscape-client.init 1970-01-01 00:00:00 +0000
2236+++ debian/landscape-client.init 2012-04-22 14:14:27 +0000
2237@@ -0,0 +1,112 @@
2238+#!/bin/sh
2239+
2240+### BEGIN INIT INFO
2241+# Provides: landscape-client
2242+# Required-Start: $local_fs $remote_fs
2243+# Required-Stop: $local_fs $remote_fs
2244+# Default-Start: 2 3 4 5
2245+# Default-Stop: 0 1 6
2246+# Short-Description: Landscape client daemons
2247+# Description: The Landscape client daemons are needed so the
2248+# Landscape server can manage a computer.
2249+### END INIT INFO
2250+
2251+LANDSCAPE_DEFAULTS=/etc/default/landscape-client
2252+NAME=landscape-client
2253+DAEMON=/usr/bin/$NAME
2254+PIDDIR=/var/run/landscape
2255+SOCKETDIR=/var/lib/landscape/client/sockets
2256+PIDFILE=$PIDDIR/$NAME.pid
2257+RUN=0 # overridden in /etc/default/landscape-client
2258+CLOUD=0 # overridden in /etc/default/landscape-client
2259+DAEMON_GROUP=landscape
2260+export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
2261+
2262+[ -f $DAEMON ] || exit 0
2263+
2264+. /lib/lsb/init-functions
2265+[ -f $LANDSCAPE_DEFAULTS ] && . $LANDSCAPE_DEFAULTS
2266+
2267+check_config () {
2268+ # This $RUN check should match the semantics of
2269+ # l.sysvconfig.SysVConfig.is_configured_to_run.
2270+ if [ $RUN -eq 0 ]; then
2271+ if [ $CLOUD -eq 1 ]; then
2272+ if landscape-is-cloud-managed; then
2273+ # Install the cloud default configuration file
2274+ cp /usr/share/landscape/cloud-default.conf /etc/landscape/client.conf
2275+ # Override default file for not going in this conditional again at
2276+ # next startup
2277+ sed -i "s/^RUN=.*/RUN=1/" $LANDSCAPE_DEFAULTS
2278+ if ! grep -q "^RUN=" $LANDSCAPE_DEFAULTS; then
2279+ echo "RUN=1" >> $LANDSCAPE_DEFAULTS
2280+ fi
2281+ else
2282+ echo "$NAME is not configured, please run landscape-config."
2283+ exit 0
2284+ fi
2285+ else
2286+ echo "$NAME is not configured, please run landscape-config."
2287+ exit 0
2288+ fi
2289+ fi
2290+}
2291+
2292+case "$1" in
2293+ start)
2294+ check_config
2295+ log_daemon_msg "Starting the $NAME daemon"
2296+ if [ ! -e $PIDDIR ]; then
2297+ mkdir $PIDDIR
2298+ chown landscape $PIDDIR
2299+ fi
2300+ # Cleanup leftover sockets if there's no other landscape process
2301+ # running. This shouldn't be usually necessary, but it can
2302+ # happen in case the client crashed badly and the socket points
2303+ # to a process with the same PID.
2304+ if [ -d "${SOCKETDIR:?}" ]; then
2305+ if ! pidofproc -p "$PIDFILE" "$DAEMON" > /dev/null; then
2306+ find "${SOCKETDIR:?}" -maxdepth 1 -type s -print0 | xargs -r0 rm -f
2307+ find "${SOCKETDIR:?}" -maxdepth 1 -type l -print0 | xargs -r0 rm -f
2308+ fi
2309+ fi
2310+
2311+ FULL_COMMAND="start-stop-daemon --start --quiet --oknodo --startas $DAEMON --pidfile $PIDFILE -g $DAEMON_GROUP -- --daemon --pid-file $PIDFILE"
2312+ if [ x"$DAEMON_USER" != x ]; then
2313+ sudo -u $DAEMON_USER $FULL_COMMAND
2314+ else
2315+ $FULL_COMMAND
2316+ fi
2317+ log_end_msg $?
2318+ ;;
2319+
2320+ stop)
2321+ log_daemon_msg "Stopping $NAME daemon"
2322+ start-stop-daemon --retry 30 --stop --quiet --pidfile $PIDFILE
2323+ log_end_msg $?
2324+ ;;
2325+
2326+ status)
2327+ # We want to maintain backward compatibility with Dapper,
2328+ # so we're not going to use status_of_proc()
2329+ pidofproc -p $PIDFILE $DAEMON >/dev/null
2330+ status=$?
2331+ if [ $status -eq 0 ]; then
2332+ log_success_msg "$NAME is running"
2333+ else
2334+ log_failure_msg "$NAME is not running"
2335+ fi
2336+ exit $status
2337+ ;;
2338+
2339+ restart|force-reload)
2340+ $0 stop && $0 start
2341+ ;;
2342+
2343+ *)
2344+ echo "Usage: $0 {start|stop|status|restart|force-reload}"
2345+ exit 1
2346+ ;;
2347+esac
2348+
2349+exit 0
2350
2351=== added file 'debian/landscape-client.install'
2352--- debian/landscape-client.install 1970-01-01 00:00:00 +0000
2353+++ debian/landscape-client.install 2012-04-22 14:14:27 +0000
2354@@ -0,0 +1,14 @@
2355+usr/bin/landscape-broker
2356+usr/bin/landscape-client
2357+usr/bin/landscape-config
2358+usr/bin/landscape-manager
2359+usr/bin/landscape-message
2360+usr/bin/landscape-monitor
2361+usr/bin/landscape-package-changer
2362+usr/bin/landscape-package-reporter
2363+usr/bin/landscape-release-upgrader
2364+usr/bin/landscape-is-cloud-managed
2365+usr/bin/landscape-dbus-proxy
2366+usr/share/landscape/cloud-default.conf
2367+etc/dbus-1/system.d/landscape.conf
2368+usr/lib/landscape
2369
2370=== added file 'debian/landscape-client.logrotate'
2371--- debian/landscape-client.logrotate 1970-01-01 00:00:00 +0000
2372+++ debian/landscape-client.logrotate 2012-04-22 14:14:27 +0000
2373@@ -0,0 +1,20 @@
2374+/var/log/landscape/watchdog.log /var/log/landscape/monitor.log /var/log/landscape/broker.log /var/log/landscape/manager.log {
2375+ weekly
2376+ rotate 4
2377+ missingok
2378+ notifempty
2379+ compress
2380+ nocreate
2381+ postrotate
2382+ [ -f /var/run/landscape/landscape-client.pid ] && kill -s USR1 `cat /var/run/landscape/landscape-client.pid` > /dev/null 2>&1 || :
2383+ endscript
2384+}
2385+
2386+/var/log/landscape/package-changer.log /var/log/landscape/package-reporter.log /var/log/landscape/sysinfo.log /var/log/landscape/release-upgrader.log {
2387+ weekly
2388+ rotate 4
2389+ missingok
2390+ notifempty
2391+ compress
2392+ nocreate
2393+}
2394
2395=== added file 'debian/landscape-client.postinst'
2396--- debian/landscape-client.postinst 1970-01-01 00:00:00 +0000
2397+++ debian/landscape-client.postinst 2012-04-22 14:14:27 +0000
2398@@ -0,0 +1,150 @@
2399+#!/bin/sh
2400+set -e
2401+
2402+# summary of how this script can be called:
2403+# * <postinst> `configure' <most-recently-configured-version>
2404+# * <old-postinst> `abort-upgrade' <new version>
2405+# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
2406+# <new-version>
2407+# * <postinst> `abort-remove'
2408+# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
2409+# <failed-install-package> <version> `removing'
2410+# <conflicting-package> <version>
2411+# for details, see http://www.debian.org/doc/debian-policy/ or
2412+# the debian-policy package
2413+
2414+. /usr/share/debconf/confmodule
2415+trap "db_stop || true" EXIT HUP INT QUIT TERM
2416+
2417+PACKAGE=landscape-client
2418+
2419+# Use the default installed Python. Running just "python" might run
2420+# something from /usr/local/bin, which doesn't necessarily support
2421+# running the landscape client.
2422+PYTHON=/usr/bin/python
2423+
2424+case "$1" in
2425+ configure)
2426+
2427+ CONFIG_FILE=/etc/landscape/client.conf
2428+ if [ ! -f $CONFIG_FILE ]; then
2429+ # Create new configuration, with private mode
2430+ TEMPFILE=$(mktemp -p /etc/landscape)
2431+ cat > $TEMPFILE <<END
2432+[client]
2433+log_level = info
2434+url = https://landscape.canonical.com/message-system
2435+ping_url = http://landscape.canonical.com/ping
2436+data_path = /var/lib/landscape/client
2437+END
2438+ chown landscape $TEMPFILE
2439+ mv $TEMPFILE $CONFIG_FILE
2440+
2441+ # Get configuration values from debconf
2442+ db_get $PACKAGE/computer_title
2443+ COMPUTER_TITLE="${RET}"
2444+ db_get $PACKAGE/account_name
2445+ ACCOUNT_NAME="${RET}"
2446+ db_get $PACKAGE/registration_password
2447+ REGISTRATION_PASSWORD="${RET}"
2448+ db_get $PACKAGE/url
2449+ URL="${RET}"
2450+ db_get $PACKAGE/exchange_interval
2451+ EXCHANGE_INTERVAL="${RET}"
2452+ db_get $PACKAGE/urgent_exchange_interval
2453+ URGENT_EXCHANGE_INTERVAL="${RET}"
2454+ db_get $PACKAGE/ping_url
2455+ PING_URL="${RET}"
2456+ db_get $PACKAGE/ping_interval
2457+ PING_INTERVAL="${RET}"
2458+ db_get $PACKAGE/http_proxy
2459+ HTTP_PROXY="${RET}"
2460+ db_get $PACKAGE/https_proxy
2461+ HTTPS_PROXY="${RET}"
2462+ db_get $PACKAGE/tags
2463+ TAGS="${RET}"
2464+
2465+ # If we got the needed information, actually do the registration.
2466+ if [ -n "$ACCOUNT_NAME" -a -n "$COMPUTER_TITLE" ]; then
2467+ landscape-config --silent --ok-no-register \
2468+ --computer-title "$COMPUTER_TITLE" \
2469+ --account-name "$ACCOUNT_NAME" \
2470+ --registration-password "$REGISTRATION_PASSWORD" \
2471+ --url "$URL" \
2472+ --exchange-interval "$EXCHANGE_INTERVAL" \
2473+ --urgent-exchange-interval "$URGENT_EXCHANGE_INTERVAL" \
2474+ --ping-url "$PING_URL" \
2475+ --ping-interval "$PING_INTERVAL" \
2476+ --http-proxy "$HTTP_PROXY" \
2477+ --https-proxy "$HTTPS_PROXY" \
2478+ --tags "$TAGS"
2479+ fi
2480+ else
2481+ # Fix non-private permissions
2482+ chmod 0600 $CONFIG_FILE
2483+ fi
2484+
2485+ # old monolithic clients have a single persist data file and a single
2486+ # package hash db. This data should be migrated to the new format
2487+ # where each service has a persist and the package data is kept in a
2488+ # sqlite database.
2489+
2490+ DATA_BPICKLE=$DATA_DIR/client/data.bpickle
2491+ BROKER_BPICKLE=$DATA_DIR/client/broker.bpickle
2492+
2493+ if [ -f $DATA_BPICKLE -a ! -f $BROKER_BPICKLE ]; then
2494+ $PYTHON -c "from landscape.upgraders import legacy; legacy.migrate_data_file('$DATA_DIR/client')"
2495+ mv $DATA_BPICKLE $DATA_BPICKLE.migrated
2496+ echo "Old monolithic client data file migrated to new format."
2497+ fi
2498+
2499+ # Remove statoverride for smart-update, if there's one
2500+ smart_update=/usr/lib/landscape/smart-update
2501+ if dpkg-statoverride --list $smart_update >/dev/null 2>&1; then
2502+ dpkg-statoverride --remove $smart_update
2503+ fi
2504+
2505+ # Add the setuid flag to apt-update, and make it be executable by
2506+ # users in the landscape group (that normally means landscape itself)
2507+ apt_update=/usr/lib/landscape/apt-update
2508+ if ! dpkg-statoverride --list $apt_update >/dev/null 2>&1; then
2509+ dpkg-statoverride --update --add root landscape 4754 $apt_update
2510+ fi
2511+
2512+ # Remove old cron jobs
2513+ old_cron_job=/etc/cron.hourly/landscape-client
2514+ if [ -e $old_cron_job ]; then
2515+ rm $old_cron_job
2516+ fi
2517+ very_old_cron_job=/etc/cron.hourly/smartpm-core
2518+ if [ -e $very_old_cron_job ]; then
2519+ rm $very_old_cron_job
2520+ fi
2521+
2522+ # Check if we're upgrading from a D-Bus version
2523+ if ! [ -z $2 ]; then
2524+ if dpkg --compare-versions $2 lt 1.5.1; then
2525+ # Launch a proxy service that will forward requests over DBus
2526+ # from the old package-changer to the new AMP-based broker. This
2527+ # is a one-off only needed for the DBus->AMP upgrade
2528+ start-stop-daemon -x /usr/bin/landscape-dbus-proxy -b -c landscape -u landscape -S
2529+ fi
2530+ fi
2531+
2532+ ;;
2533+
2534+ abort-upgrade|abort-remove|abort-deconfigure)
2535+ ;;
2536+
2537+ *)
2538+ echo "postinst called with unknown argument \`$1'" >&2
2539+ exit 1
2540+ ;;
2541+esac
2542+
2543+# dh_installdeb will replace this with shell code automatically
2544+# generated by other debhelper scripts.
2545+
2546+#DEBHELPER#
2547+
2548+exit 0
2549
2550=== added file 'debian/landscape-client.postrm'
2551--- debian/landscape-client.postrm 1970-01-01 00:00:00 +0000
2552+++ debian/landscape-client.postrm 2012-04-22 14:14:27 +0000
2553@@ -0,0 +1,50 @@
2554+#!/bin/sh
2555+set -e
2556+
2557+# summary of how this script can be called:
2558+# * <postrm> `remove'
2559+# * <postrm> `purge'
2560+# * <old-postrm> `upgrade' <new-version>
2561+# * <new-postrm> `failed-upgrade' <old-version>
2562+# * <new-postrm> `abort-install'
2563+# * <new-postrm> `abort-install' <old-version>
2564+# * <new-postrm> `abort-upgrade' <old-version>
2565+# * <disappearer's-postrm> `disappear' <overwriter>
2566+# <overwriter-version>
2567+# for details, see http://www.debian.org/doc/debian-policy/ or
2568+# the debian-policy package
2569+
2570+case "$1" in
2571+ purge)
2572+ LOG_DIR=/var/log/landscape
2573+ DATA_DIR=/var/lib/landscape
2574+
2575+ rm -f "/etc/default/landscape-client"
2576+
2577+ rm -f "${LOG_DIR}/manager.log"*
2578+ rm -f "${LOG_DIR}/monitor.log"*
2579+ rm -f "${LOG_DIR}/broker.log"*
2580+ rm -f "${LOG_DIR}/watchdog.log"*
2581+ rm -f "${LOG_DIR}/package-reporter.log"*
2582+ rm -f "${LOG_DIR}/package-changer.log"*
2583+
2584+ rm -rf "${DATA_DIR}/client"
2585+ rm -rf "${DATA_DIR}/.gnupg"
2586+
2587+ ;;
2588+
2589+ remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
2590+ ;;
2591+
2592+ *)
2593+ echo "postrm called with unknown argument \`$1'" >&2
2594+ exit 1
2595+ ;;
2596+esac
2597+
2598+# dh_installdeb will replace this with shell code automatically
2599+# generated by other debhelper scripts.
2600+
2601+#DEBHELPER#
2602+
2603+exit 0
2604
2605=== added file 'debian/landscape-client.prerm'
2606--- debian/landscape-client.prerm 1970-01-01 00:00:00 +0000
2607+++ debian/landscape-client.prerm 2012-04-22 14:14:27 +0000
2608@@ -0,0 +1,45 @@
2609+#!/bin/sh
2610+# prerm script for landscape-client
2611+#
2612+# see: dh_installdeb(1)
2613+
2614+set -e
2615+
2616+# summary of how this script can be called:
2617+# * <prerm> `remove'
2618+# * <old-prerm> `upgrade' <new-version>
2619+# * <new-prerm> `failed-upgrade' <old-version>
2620+# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
2621+# * <deconfigured's-prerm> `deconfigure' `in-favour'
2622+# <package-being-installed> <version> `removing'
2623+# <conflicting-package> <version>
2624+# for details, see http://www.debian.org/doc/debian-policy/ or
2625+# the debian-policy package
2626+
2627+
2628+case "$1" in
2629+ remove|upgrade|deconfigure)
2630+
2631+ # Remove statoverride for apt-update
2632+ apt_update=/usr/lib/landscape/apt-update
2633+ if dpkg-statoverride --list $apt_update >/dev/null 2>&1; then
2634+ dpkg-statoverride --remove $apt_update
2635+ fi
2636+
2637+ ;;
2638+
2639+ failed-upgrade)
2640+ ;;
2641+
2642+ *)
2643+ echo "prerm called with unknown argument \`$1'" >&2
2644+ exit 1
2645+ ;;
2646+esac
2647+
2648+# dh_installdeb will replace this with shell code automatically
2649+# generated by other debhelper scripts.
2650+
2651+#DEBHELPER#
2652+
2653+exit 0
2654
2655=== added file 'debian/landscape-client.templates'
2656--- debian/landscape-client.templates 1970-01-01 00:00:00 +0000
2657+++ debian/landscape-client.templates 2012-04-22 14:14:27 +0000
2658@@ -0,0 +1,77 @@
2659+Template: landscape-client/computer_title
2660+Type: string
2661+_Description: Computer Title:
2662+ Descriptive text to identify this computer uniquely in the
2663+ Landscape user interface.
2664+
2665+Template: landscape-client/account_name
2666+Type: string
2667+_Description: Account Name:
2668+ Short lowercase identifier of the Landscape account this computer
2669+ will be assigned.
2670+
2671+Template: landscape-client/registration_password
2672+Type: password
2673+_Description: Registration Password:
2674+ Client registration password for the given Landscape account. Only
2675+ needed if the given account is requesting a client registration
2676+ password.
2677+
2678+Template: landscape-client/url
2679+Type: string
2680+Default: https://landscape.canonical.com/message-system
2681+_Description: Landscape Server URL:
2682+ The server URL to connect to.
2683+
2684+Template: landscape-client/exchange_interval
2685+Type: string
2686+Default: 900
2687+_Description: Message Exchange Interval:
2688+ Interval, in seconds, between normal message exchanges with the Landscape
2689+ server.
2690+
2691+Template: landscape-client/urgent_exchange_interval
2692+Type: string
2693+Default: 60
2694+_Description: Urgent Message Exchange Interval:
2695+ Interval, in seconds, between urgent message exchanges with the Landscape
2696+ server.
2697+
2698+Template: landscape-client/ping_url
2699+Type: string
2700+Default: http://landscape.canonical.com/ping
2701+_Description: Landscape PingServer URL:
2702+ The URL to perform lightweight exchange initiation with.
2703+
2704+Template: landscape-client/ping_interval
2705+Type: string
2706+Default: 30
2707+_Description: Ping Interval:
2708+ Interval, in seconds, between client ping exchanges with the Landscape server.
2709+
2710+Template: landscape-client/http_proxy
2711+Type: string
2712+Default:
2713+_Description: HTTP proxy (blank for none):
2714+ The URL of the HTTP proxy, if one is needed.
2715+
2716+Template: landscape-client/https_proxy
2717+Type: string
2718+Default:
2719+_Description: HTTPS proxy (blank for none):
2720+ The URL of the HTTPS proxy, if one is needed.
2721+
2722+Template: landscape-client/tags
2723+Type: string
2724+Default:
2725+_Description: Initial tags for first registration
2726+ Comma separated list of tags which will be assigned to this computer on its
2727+ first registration. Once the machine is registered, these tags can only be
2728+ changed using the Landscape server.
2729+
2730+Template: landscape-client/register_system
2731+Type: boolean
2732+Default: false
2733+_Description: Register this system with the Landscape server?
2734+ Register this system with a preexisting Landscape account. Please
2735+ go to http://landscape.canonical.com if you need a Landscape account.
2736
2737=== added file 'debian/landscape-common.config'
2738--- debian/landscape-common.config 1970-01-01 00:00:00 +0000
2739+++ debian/landscape-common.config 2012-04-22 14:14:27 +0000
2740@@ -0,0 +1,10 @@
2741+#!/bin/sh
2742+
2743+PACKAGE=landscape-common
2744+
2745+set -e
2746+. /usr/share/debconf/confmodule
2747+
2748+# Ask questions.
2749+db_input medium $PACKAGE/sysinfo || true
2750+db_go
2751
2752=== added file 'debian/landscape-common.dirs'
2753--- debian/landscape-common.dirs 1970-01-01 00:00:00 +0000
2754+++ debian/landscape-common.dirs 2012-04-22 14:14:27 +0000
2755@@ -0,0 +1,1 @@
2756+etc/update-motd.d
2757
2758=== added file 'debian/landscape-common.install'
2759--- debian/landscape-common.install 1970-01-01 00:00:00 +0000
2760+++ debian/landscape-common.install 2012-04-22 14:14:27 +0000
2761@@ -0,0 +1,3 @@
2762+usr/lib/python*
2763+usr/bin/landscape-sysinfo
2764+usr/share/landscape/landscape-sysinfo.wrapper
2765
2766=== added file 'debian/landscape-common.postinst'
2767--- debian/landscape-common.postinst 1970-01-01 00:00:00 +0000
2768+++ debian/landscape-common.postinst 2012-04-22 14:14:27 +0000
2769@@ -0,0 +1,107 @@
2770+#!/bin/sh
2771+set -e
2772+
2773+# summary of how this script can be called:
2774+# * <postinst> `configure' <most-recently-configured-version>
2775+# * <old-postinst> `abort-upgrade' <new version>
2776+# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
2777+# <new-version>
2778+# * <postinst> `abort-remove'
2779+# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
2780+# <failed-install-package> <version> `removing'
2781+# <conflicting-package> <version>
2782+# for details, see http://www.debian.org/doc/debian-policy/ or
2783+# the debian-policy package
2784+
2785+. /usr/share/debconf/confmodule
2786+trap "db_stop || true" EXIT HUP INT QUIT TERM
2787+
2788+PACKAGE=landscape-common
2789+
2790+# Use the default installed Python. Running just "python" might run
2791+# something from /usr/local/bin, which doesn't necessarily support
2792+# running the landscape client.
2793+PYTHON=/usr/bin/python
2794+
2795+case "$1" in
2796+ configure)
2797+
2798+ db_get $PACKAGE/sysinfo
2799+ # Choices:
2800+ # * Do not display sysinfo on login
2801+ # * Cache sysinfo in /etc/motd
2802+ # * Run sysinfo on every login
2803+ SYSINFO="${RET:-Cache sysinfo in /etc/motd}"
2804+ WRAPPER=/usr/share/landscape/landscape-sysinfo.wrapper
2805+ PROFILE_LOCATION=/etc/profile.d/50-landscape-sysinfo.sh
2806+ UPDATE_MOTD_LOCATION=/etc/update-motd.d/50-landscape-sysinfo
2807+ if [ "$RET" = "Cache sysinfo in /etc/motd" ]; then
2808+ rm -f $PROFILE_LOCATION 2>/dev/null || true
2809+ ln -sf $WRAPPER $UPDATE_MOTD_LOCATION
2810+ /usr/sbin/update-motd 2>/dev/null || true
2811+ elif [ "$RET" = "Run sysinfo on every login" ]; then
2812+ rm -f $UPDATE_MOTD_LOCATION 2>/dev/null || true
2813+ /usr/sbin/update-motd 2>/dev/null || true
2814+ ln -sf $WRAPPER $PROFILE_LOCATION
2815+ else
2816+ rm -f $UPDATE_MOTD_LOCATION 2>/dev/null || true
2817+ /usr/sbin/update-motd 2>/dev/null || true
2818+ rm -f $PROFILE_LOCATION || true
2819+ fi
2820+
2821+ # 0.9.1 introduces non-backwards compatible changes. This detects
2822+ # whether or not the data is in the current format. If not, all
2823+ # existing data is removed.
2824+ DATA_DIR=/var/lib/landscape
2825+
2826+ if [ -d $DATA_DIR/data ]; then
2827+ rm -rf $DATA_DIR/*
2828+ elif [ -f $DATA_DIR/client/data.bpickle ]; then
2829+ LAST_BYTE=`sed -n '$,$s/.*\(.\)/\1/p' $DATA_DIR/client/data.bpickle`
2830+ if [ "$LAST_BYTE" = e ]; then
2831+ rm -rf $DATA_DIR/*
2832+ fi
2833+ fi
2834+
2835+ # Create landscape system user
2836+ if ! getent passwd landscape >/dev/null; then
2837+ adduser --quiet --system --group --disabled-password \
2838+ --home /var/lib/landscape --no-create-home landscape
2839+ fi
2840+
2841+ # Create landscape system group (for <= 1.0.29.1-0ubuntu0.9.04.0)
2842+ if ! getent group landscape >/dev/null; then
2843+ addgroup --quiet --system landscape
2844+ fi
2845+
2846+ # Ensure primary group is landscape (for <= 1.0.29.1-0ubuntu0.9.04.0)
2847+ if ! usermod -g landscape landscape > /dev/null 2>&1; then
2848+ echo "ERROR: usermod -g landscape landscape failed."
2849+ fi
2850+
2851+ # Fix prior ownerships, we exclude the custom-graph-scripts directory
2852+ # because there might script-generated files that we want to preserve
2853+ # the ownership of.
2854+ if [ -d /var/lib/landscape/client ]; then
2855+ find /var/lib/landscape/client/ -wholename /var/lib/landscape/client/custom-graph-scripts -prune -or -exec chown landscape {} \; > /dev/null 2>&1
2856+ fi
2857+ [ -d /var/lib/landscape/.gnupg ] && chown -R landscape /var/lib/landscape/.gnupg || :
2858+ chown -R landscape /var/log/landscape
2859+
2860+ ;;
2861+
2862+ abort-upgrade|abort-remove|abort-deconfigure)
2863+ ;;
2864+
2865+ *)
2866+ echo "postinst called with unknown argument \`$1'" >&2
2867+ exit 1
2868+ ;;
2869+esac
2870+
2871+# dh_installdeb will replace this with shell code automatically
2872+# generated by other debhelper scripts.
2873+
2874+#DEBHELPER#
2875+
2876+exit 0
2877
2878=== added file 'debian/landscape-common.postrm'
2879--- debian/landscape-common.postrm 1970-01-01 00:00:00 +0000
2880+++ debian/landscape-common.postrm 2012-04-22 14:14:27 +0000
2881@@ -0,0 +1,40 @@
2882+#!/bin/sh
2883+set -e
2884+
2885+# summary of how this script can be called:
2886+# * <postrm> `remove'
2887+# * <postrm> `purge'
2888+# * <old-postrm> `upgrade' <new-version>
2889+# * <new-postrm> `failed-upgrade' <old-version>
2890+# * <new-postrm> `abort-install'
2891+# * <new-postrm> `abort-install' <old-version>
2892+# * <new-postrm> `abort-upgrade' <old-version>
2893+# * <disappearer's-postrm> `disappear' <overwriter>
2894+# <overwriter-version>
2895+# for details, see http://www.debian.org/doc/debian-policy/ or
2896+# the debian-policy package
2897+
2898+case "$1" in
2899+ purge)
2900+ LOG_DIR=/var/log/landscape
2901+ CONFIG_FILE=/etc/landscape/client.conf
2902+ deluser --quiet --system landscape >/dev/null || true
2903+ rm -f "${LOG_DIR}/sysinfo.log"*
2904+ rm -f "${CONFIG_FILE}"
2905+ ;;
2906+
2907+ remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
2908+ ;;
2909+
2910+ *)
2911+ echo "postrm called with unknown argument \`$1'" >&2
2912+ exit 1
2913+ ;;
2914+esac
2915+
2916+# dh_installdeb will replace this with shell code automatically
2917+# generated by other debhelper scripts.
2918+
2919+#DEBHELPER#
2920+
2921+exit 0
2922
2923=== added file 'debian/landscape-common.prerm'
2924--- debian/landscape-common.prerm 1970-01-01 00:00:00 +0000
2925+++ debian/landscape-common.prerm 2012-04-22 14:14:27 +0000
2926@@ -0,0 +1,41 @@
2927+#!/bin/sh
2928+# prerm script for landscape-common
2929+#
2930+# see: dh_installdeb(1)
2931+
2932+set -e
2933+
2934+# summary of how this script can be called:
2935+# * <prerm> `remove'
2936+# * <old-prerm> `upgrade' <new-version>
2937+# * <new-prerm> `failed-upgrade' <old-version>
2938+# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
2939+# * <deconfigured's-prerm> `deconfigure' `in-favour'
2940+# <package-being-installed> <version> `removing'
2941+# <conflicting-package> <version>
2942+# for details, see http://www.debian.org/doc/debian-policy/ or
2943+# the debian-policy package
2944+
2945+
2946+case "$1" in
2947+ remove|upgrade|deconfigure)
2948+ rm -f /etc/update-motd.d/50-landscape-sysinfo 2>/dev/null || true
2949+ /usr/sbin/update-motd 2>/dev/null || true
2950+ rm -f /etc/profile.d/landscape-sysinfo.sh 2>/dev/null || true
2951+ ;;
2952+
2953+ failed-upgrade)
2954+ ;;
2955+
2956+ *)
2957+ echo "prerm called with unknown argument \`$1'" >&2
2958+ exit 1
2959+ ;;
2960+esac
2961+
2962+# dh_installdeb will replace this with shell code automatically
2963+# generated by other debhelper scripts.
2964+
2965+#DEBHELPER#
2966+
2967+exit 0
2968
2969=== added file 'debian/landscape-common.templates'
2970--- debian/landscape-common.templates 1970-01-01 00:00:00 +0000
2971+++ debian/landscape-common.templates 2012-04-22 14:14:27 +0000
2972@@ -0,0 +1,20 @@
2973+Template: landscape-common/sysinfo
2974+Type: select
2975+# Translators beware! the following three strings form a single
2976+# Choices menu. - Every one of these strings has to fit in a standard
2977+# 80 characters console, as the fancy screen setup takes up some space
2978+# try to keep below ~71 characters.
2979+# DO NOT USE commas (,) in Choices translations otherwise
2980+# this will break the choices shown to users
2981+_Choices: Do not display sysinfo on login, Cache sysinfo in /etc/motd, Run sysinfo on every login
2982+Default: Cache sysinfo in /etc/motd
2983+_Description: landscape-sysinfo configuration:
2984+ Landscape includes a tool and a set of modules that can display
2985+ system status, information, and statistics on login.
2986+ .
2987+ This information can be gathered periodically (every 10 minutes)
2988+ and automatically written to /etc/motd. The data could be a few
2989+ minutes out-of-date.
2990+ .
2991+ Or, this information can be gathered at login. The data will be
2992+ more current, but might introduce a small delay at login.
2993
2994=== added file 'debian/landscape-sysinfo.wrapper'
2995--- debian/landscape-sysinfo.wrapper 1970-01-01 00:00:00 +0000
2996+++ debian/landscape-sysinfo.wrapper 2012-04-22 14:14:27 +0000
2997@@ -0,0 +1,14 @@
2998+#!/bin/sh
2999+cores=$(grep -c ^processor /proc/cpuinfo 2>/dev/null)
3000+[ "$cores" -eq "0" ] && cores=1
3001+threshold="${cores:-1}.0"
3002+if [ $(echo "`cut -f1 -d ' ' /proc/loadavg` < $threshold" | bc) -eq 1 ]; then
3003+ echo
3004+ echo -n " System information as of "
3005+ /bin/date
3006+ echo
3007+ /usr/bin/landscape-sysinfo
3008+else
3009+ echo
3010+ echo " System information disabled due to load higher than $threshold"
3011+fi
3012
3013=== added directory 'debian/po'
3014=== added file 'debian/po/POTFILES.in'
3015--- debian/po/POTFILES.in 1970-01-01 00:00:00 +0000
3016+++ debian/po/POTFILES.in 2012-04-22 14:14:27 +0000
3017@@ -0,0 +1,2 @@
3018+[type: gettext/rfc822deb] landscape-client.templates
3019+[type: gettext/rfc822deb] landscape-common.templates
3020
3021=== added file 'debian/po/templates.pot'
3022--- debian/po/templates.pot 1970-01-01 00:00:00 +0000
3023+++ debian/po/templates.pot 2012-04-22 14:14:27 +0000
3024@@ -0,0 +1,224 @@
3025+# SOME DESCRIPTIVE TITLE.
3026+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3027+# This file is distributed under the same license as the PACKAGE package.
3028+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
3029+#
3030+#, fuzzy
3031+msgid ""
3032+msgstr ""
3033+"Project-Id-Version: PACKAGE VERSION\n"
3034+"Report-Msgid-Bugs-To: landscape-client@packages.debian.org\n"
3035+"POT-Creation-Date: 2012-03-07 17:07+0100\n"
3036+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
3037+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
3038+"Language-Team: LANGUAGE <LL@li.org>\n"
3039+"Language: \n"
3040+"MIME-Version: 1.0\n"
3041+"Content-Type: text/plain; charset=CHARSET\n"
3042+"Content-Transfer-Encoding: 8bit\n"
3043+
3044+#. Type: string
3045+#. Description
3046+#: ../landscape-client.templates:1001
3047+msgid "Computer Title:"
3048+msgstr ""
3049+
3050+#. Type: string
3051+#. Description
3052+#: ../landscape-client.templates:1001
3053+msgid ""
3054+"Descriptive text to identify this computer uniquely in the Landscape user "
3055+"interface."
3056+msgstr ""
3057+
3058+#. Type: string
3059+#. Description
3060+#: ../landscape-client.templates:2001
3061+msgid "Account Name:"
3062+msgstr ""
3063+
3064+#. Type: string
3065+#. Description
3066+#: ../landscape-client.templates:2001
3067+msgid ""
3068+"Short lowercase identifier of the Landscape account this computer will be "
3069+"assigned."
3070+msgstr ""
3071+
3072+#. Type: password
3073+#. Description
3074+#: ../landscape-client.templates:3001
3075+msgid "Registration Password:"
3076+msgstr ""
3077+
3078+#. Type: password
3079+#. Description
3080+#: ../landscape-client.templates:3001
3081+msgid ""
3082+"Client registration password for the given Landscape account. Only needed "
3083+"if the given account is requesting a client registration password."
3084+msgstr ""
3085+
3086+#. Type: string
3087+#. Description
3088+#: ../landscape-client.templates:4001
3089+msgid "Landscape Server URL:"
3090+msgstr ""
3091+
3092+#. Type: string
3093+#. Description
3094+#: ../landscape-client.templates:4001
3095+msgid "The server URL to connect to."
3096+msgstr ""
3097+
3098+#. Type: string
3099+#. Description
3100+#: ../landscape-client.templates:5001
3101+msgid "Message Exchange Interval:"
3102+msgstr ""
3103+
3104+#. Type: string
3105+#. Description
3106+#: ../landscape-client.templates:5001
3107+msgid ""
3108+"Interval, in seconds, between normal message exchanges with the Landscape "
3109+"server."
3110+msgstr ""
3111+
3112+#. Type: string
3113+#. Description
3114+#: ../landscape-client.templates:6001
3115+msgid "Urgent Message Exchange Interval:"
3116+msgstr ""
3117+
3118+#. Type: string
3119+#. Description
3120+#: ../landscape-client.templates:6001
3121+msgid ""
3122+"Interval, in seconds, between urgent message exchanges with the Landscape "
3123+"server."
3124+msgstr ""
3125+
3126+#. Type: string
3127+#. Description
3128+#: ../landscape-client.templates:7001
3129+msgid "Landscape PingServer URL:"
3130+msgstr ""
3131+
3132+#. Type: string
3133+#. Description
3134+#: ../landscape-client.templates:7001
3135+msgid "The URL to perform lightweight exchange initiation with."
3136+msgstr ""
3137+
3138+#. Type: string
3139+#. Description
3140+#: ../landscape-client.templates:8001
3141+msgid "Ping Interval:"
3142+msgstr ""
3143+
3144+#. Type: string
3145+#. Description
3146+#: ../landscape-client.templates:8001
3147+msgid ""
3148+"Interval, in seconds, between client ping exchanges with the Landscape "
3149+"server."
3150+msgstr ""
3151+
3152+#. Type: string
3153+#. Description
3154+#: ../landscape-client.templates:9001
3155+msgid "HTTP proxy (blank for none):"
3156+msgstr ""
3157+
3158+#. Type: string
3159+#. Description
3160+#: ../landscape-client.templates:9001
3161+msgid "The URL of the HTTP proxy, if one is needed."
3162+msgstr ""
3163+
3164+#. Type: string
3165+#. Description
3166+#: ../landscape-client.templates:10001
3167+msgid "HTTPS proxy (blank for none):"
3168+msgstr ""
3169+
3170+#. Type: string
3171+#. Description
3172+#: ../landscape-client.templates:10001
3173+msgid "The URL of the HTTPS proxy, if one is needed."
3174+msgstr ""
3175+
3176+#. Type: string
3177+#. Description
3178+#: ../landscape-client.templates:11001
3179+msgid "Initial tags for first registration"
3180+msgstr ""
3181+
3182+#. Type: string
3183+#. Description
3184+#: ../landscape-client.templates:11001
3185+msgid ""
3186+"Comma separated list of tags which will be assigned to this computer on its "
3187+"first registration. Once the machine is registered, these tags can only be "
3188+"changed using the Landscape server."
3189+msgstr ""
3190+
3191+#. Type: boolean
3192+#. Description
3193+#: ../landscape-client.templates:12001
3194+msgid "Register this system with the Landscape server?"
3195+msgstr ""
3196+
3197+#. Type: boolean
3198+#. Description
3199+#: ../landscape-client.templates:12001
3200+msgid ""
3201+"Register this system with a preexisting Landscape account. Please go to "
3202+"http://landscape.canonical.com if you need a Landscape account."
3203+msgstr ""
3204+
3205+#. Type: select
3206+#. Choices
3207+#. Translators beware! the following three strings form a single
3208+#. Choices menu. - Every one of these strings has to fit in a standard
3209+#. 80 characters console, as the fancy screen setup takes up some space
3210+#. try to keep below ~71 characters.
3211+#. DO NOT USE commas (,) in Choices translations otherwise
3212+#. this will break the choices shown to users
3213+#: ../landscape-common.templates:1001
3214+msgid ""
3215+"Do not display sysinfo on login, Cache sysinfo in /etc/motd, Run sysinfo on "
3216+"every login"
3217+msgstr ""
3218+
3219+#. Type: select
3220+#. Description
3221+#: ../landscape-common.templates:1002
3222+msgid "landscape-sysinfo configuration:"
3223+msgstr ""
3224+
3225+#. Type: select
3226+#. Description
3227+#: ../landscape-common.templates:1002
3228+msgid ""
3229+"Landscape includes a tool and a set of modules that can display system "
3230+"status, information, and statistics on login."
3231+msgstr ""
3232+
3233+#. Type: select
3234+#. Description
3235+#: ../landscape-common.templates:1002
3236+msgid ""
3237+"This information can be gathered periodically (every 10 minutes) and "
3238+"automatically written to /etc/motd. The data could be a few minutes out-of-"
3239+"date."
3240+msgstr ""
3241+
3242+#. Type: select
3243+#. Description
3244+#: ../landscape-common.templates:1002
3245+msgid ""
3246+"Or, this information can be gathered at login. The data will be more "
3247+"current, but might introduce a small delay at login."
3248+msgstr ""
3249
3250=== added file 'debian/pycompat'
3251--- debian/pycompat 1970-01-01 00:00:00 +0000
3252+++ debian/pycompat 2012-04-22 14:14:27 +0000
3253@@ -0,0 +1,1 @@
3254+2
3255
3256=== added file 'debian/rules'
3257--- debian/rules 1970-01-01 00:00:00 +0000
3258+++ debian/rules 2012-04-22 14:14:27 +0000
3259@@ -0,0 +1,128 @@
3260+#!/usr/bin/make -f
3261+
3262+dist_release := $(shell lsb_release -cs)
3263+ifneq ($(dist_release),dapper)
3264+ use_pycentral = yes
3265+endif
3266+ifeq (,$(filter $(dist_release), hardy lucid))
3267+ use_dhpython2 = yes
3268+endif
3269+
3270+dh_extra_flags = -plandscape-common -plandscape-client
3271+ifneq (,$(filter $(dist_release),precise))
3272+ # We want landscape-client-ui only from precise onward
3273+ dh_extra_flags += -plandscape-client-ui -plandscape-client-ui-install
3274+endif
3275+
3276+-include /usr/share/python/python.mk
3277+ifeq (,$(py_sitename))
3278+ py_sitename = site-packages
3279+ py_libdir = /usr/lib/python$(subst python,,$(1))/site-packages
3280+ py_sitename_sh = $(py_sitename)
3281+ py_libdir_sh = $(py_libdir)
3282+endif
3283+
3284+package = landscape-client
3285+root_dir = debian/tmp/
3286+
3287+revision = $(shell dpkg-parsechangelog | grep ^Version | cut -f 2 -d " "| cut -f 2 -d "-")
3288+
3289+landscape_common_substvars = debian/landscape-common.substvars
3290+landscape_client_substvars = debian/landscape-client.substvars
3291+
3292+build: build-stamp
3293+build-stamp:
3294+ dh_testdir
3295+ sed -i -e "s/^DEBIAN_REVISION = \"\"/DEBIAN_REVISION = \"-$(revision)\"/g" landscape/__init__.py
3296+ python setup.py build
3297+ make -C apt-update
3298+ touch build-stamp
3299+
3300+clean:
3301+ dh_testdir
3302+ dh_testroot
3303+ rm -f build-stamp
3304+ rm -rf build
3305+ make -C apt-update clean
3306+ dh_clean
3307+ debconf-updatepo
3308+ sed -i -e "s/^DEBIAN_REVISION = .*/DEBIAN_REVISION = \"\"/g" landscape/__init__.py
3309+
3310+install: build
3311+ dh_testdir
3312+ dh_testroot
3313+ dh_clean -k
3314+ dh_installdirs \
3315+ etc/landscape \
3316+ var/lib/landscape \
3317+ var/log/landscape \
3318+ usr/share/landscape
3319+
3320+ python setup.py install --root $(root_dir) $(py_setup_install_args)
3321+
3322+ install -D -o root -g root -m 755 debian/landscape-sysinfo.wrapper $(root_dir)/usr/share/landscape/landscape-sysinfo.wrapper
3323+ install -D -o root -g root -m 644 debian/cloud-default.conf $(root_dir)/usr/share/landscape/cloud-default.conf
3324+ install -D -o root -g root -m 755 apt-update/apt-update $(root_dir)/usr/lib/landscape/apt-update
3325+ install -D -o root -g root -m 644 dbus/landscape.conf $(root_dir)/etc/dbus-1/system.d/landscape.conf
3326+
3327+binary-indep:
3328+# do nothing
3329+#
3330+binary-arch: build install
3331+ # That's not present in Ubuntu releases we still support, so
3332+ # we're just installing the lintian overrides file by hand
3333+ # for now.
3334+ #dh_lintian
3335+ dh_testdir
3336+ dh_testroot
3337+ dh_installdocs
3338+ dh_installman -p landscape-client man/landscape-client.1 man/landscape-config.1 man/landscape-message.1
3339+ dh_installchangelogs
3340+ dh_install --sourcedir debian/tmp/
3341+ dh_installinit -- start 45 2 3 4 5 . stop 15 0 1 6 .
3342+ dh_installlogrotate
3343+ dh_installdebconf
3344+ dh_compress
3345+ dh_fixperms
3346+
3347+ifneq (,$(findstring $(dist_release),hardy))
3348+ # We depend on bug-fixed versions of python-dbus and pycurl on hardy
3349+ echo "extra:Depends=python-dbus" >> $(landscape_common_substvars)
3350+ echo "extra:Depends=python-pycurl, hal" >> $(landscape_client_substvars)
3351+ # The python-image-store-proxy package is needed for the eucalyptus plugin
3352+ echo "extra:Suggests=python-image-store-proxy" >> $(landscape_common_substvars)
3353+endif
3354+ifneq (,$(filter $(dist_release),lucid))
3355+ # We want libpam-modules in lucid
3356+ echo "extra:Depends=libpam-modules (>= 1.0.1-9ubuntu3), python-dbus" >> $(landscape_common_substvars)
3357+ echo "extra:Depends=python-pycurl, hal" >> $(landscape_client_substvars)
3358+endif
3359+ifeq (,$(filter $(dist_release),hardy lucid))
3360+ # Starting natty, no more hal or dbus
3361+ echo "extra:Depends=libpam-modules (>= 1.0.1-9ubuntu3)" >> $(landscape_common_substvars)
3362+ echo "extra:Depends=python-pycurl, gir1.2-gudev-1.0 (>= 165-0ubuntu2)" >> $(landscape_client_substvars)
3363+ echo "extra:Suggests=python-dbus, hal" >> $(landscape_client_substvars)
3364+endif
3365+
3366+ifeq ($(use_dhpython2),yes)
3367+ dh_python2 --no-guessing-versions
3368+else
3369+ ifeq ($(use_pycentral),yes)
3370+ ifneq (,$(py_setup_install_args))
3371+ DH_PYCENTRAL=include-links dh_pycentral
3372+ else
3373+ DH_PYCENTRAL=nomove dh_pycentral
3374+ endif
3375+ else
3376+ dh_python
3377+ endif
3378+endif
3379+ dh_installdeb $(dh_extra_flags)
3380+ dh_gencontrol $(dh_extra_flags)
3381+ dh_md5sums $(dh_extra_flags)
3382+ dh_builddeb $(dh_extra_flags)
3383+
3384+
3385+binary: binary-arch binary-indep
3386+
3387+.PHONY: binary binary-arch binary-indep clean
3388
3389=== added directory 'dev'
3390=== renamed directory 'dev' => 'dev.moved'
3391=== added file 'dev/dns-server'
3392--- dev/dns-server 1970-01-01 00:00:00 +0000
3393+++ dev/dns-server 2012-04-22 14:14:27 +0000
3394@@ -0,0 +1,99 @@
3395+#!/usr/bin/env python
3396+"""
3397+This script creates a DNS server that has enough functionality to test
3398+the server autodiscovery feature of landscape client.
3399+
3400+Landscape client uses /etc/resolv.conf to find the location of name servers.
3401+To have landscape client use this server, make sure that:
3402+
3403+nameserver 127.0.0.1
3404+
3405+is the first nameserver in /etc/resolv.conf. Linux name lookups only support
3406+port 53, so this program must run on port 53 in order to work. Be aware that
3407+NetworkManager overwrites this file any time your network configuration
3408+changes.
3409+
3410+This program does not return enough information for a tool like dig to complete
3411+successfully. If this is needed, use Bind 9, detailed at
3412+https://wiki.canonical.com/Landscape/SpecRegistry/0082
3413+"""
3414+
3415+import argparse
3416+import sys
3417+from twisted.internet import reactor, defer
3418+from twisted.names import dns, common
3419+from twisted.names.server import DNSServerFactory
3420+
3421+
3422+PORT = 5553
3423+SRV_RESPONSE = 'lds1.mylandscapehost.com'
3424+A_RESPONSE = '127.0.0.1'
3425+
3426+
3427+class SimpleResolver(common.ResolverBase):
3428+ def _lookup(self, name, cls, typ, timeout):
3429+ """
3430+ Respond to DNS requests. See documentation for
3431+ L{twisted.names.common.ResolverBase}.
3432+ """
3433+ # This nameserver returns the same result all the time, regardless
3434+ # of what name the client asks for.
3435+ results = []
3436+ ttl = 60
3437+ if typ == dns.SRV:
3438+ record = dns.Record_SRV(0, 1, 80, SRV_RESPONSE, ttl)
3439+ owner = '_landscape._tcp.mylandscapehost.com'
3440+ results.append(dns.RRHeader(owner, record.TYPE, dns.IN, ttl,
3441+ record, auth=True))
3442+ elif typ == dns.A:
3443+ record = dns.Record_A(A_RESPONSE)
3444+ owner = 'landscape.localdomain'
3445+ results.append(dns.RRHeader(owner, record.TYPE, dns.IN, ttl,
3446+ record, auth=True))
3447+
3448+ authority = []
3449+ return defer.succeed((results, authority, []))
3450+
3451+
3452+def parse_command_line(args):
3453+ global SRV_RESPONSE, A_RESPONSE, PORT
3454+ description = """
3455+ This test tool responds to DNS queries for SRV and A records. It always
3456+ responds with the same result regardless of the query string sent by the
3457+ client.
3458+
3459+ To test this tool, try the following commands:
3460+ dig -p 5553 @127.0.0.1 SRV _landscape._tcp.mylandscapehost.com
3461+
3462+ dig -p 5553 @127.0.0.1 localhost.localdomain
3463+ """
3464+ parser = argparse.ArgumentParser(description=description)
3465+ parser.add_argument("--srv-response", type=str, default=SRV_RESPONSE,
3466+ help="Give this reply to SRV queries (eg: localhost)")
3467+ parser.add_argument("--a-response", type=str, default=A_RESPONSE,
3468+ help="Give this reply to A queries (eg: 127.0.0.1)")
3469+ parser.add_argument("--port", type=int, default=PORT,
3470+ help="Listen on this port (default 5553). DNS "
3471+ "normally runs on port 53")
3472+
3473+ args = vars(parser.parse_args())
3474+ SRV_RESPONSE = args["srv_response"]
3475+ A_RESPONSE = args["a_response"]
3476+ PORT = args["port"]
3477+
3478+
3479+def main():
3480+ parse_command_line(sys.argv)
3481+
3482+ simple_resolver = SimpleResolver()
3483+ factory = DNSServerFactory(authorities=[simple_resolver], verbose=1)
3484+ protocol = dns.DNSDatagramProtocol(factory)
3485+ print "starting reactor on port %s.." % PORT
3486+ reactor.listenTCP(PORT, factory)
3487+ reactor.listenUDP(PORT, protocol)
3488+ reactor.run()
3489+ print "reactor stopped..."
3490+
3491+
3492+if __name__ == "__main__":
3493+ main()
3494
3495=== added file 'dev/landscape-client-vm'
3496--- dev/landscape-client-vm 1970-01-01 00:00:00 +0000
3497+++ dev/landscape-client-vm 2012-04-22 14:14:27 +0000
3498@@ -0,0 +1,178 @@
3499+#!/bin/sh -e
3500+
3501+help () {
3502+ cat <<EOF
3503+$0 [OPTION] ... <release>: build a landscape-client VM
3504+for the specified release. Available options:
3505+
3506+ -m, --mirror <mirror> The Ubuntu mirror to use to build the VM, and
3507+ for the APT sources inside the VM itself.
3508+ If you want to use apt-proxy, you have to
3509+ modify the apt-proxy-v2.conf file to make
3510+ apt-proxy listen to your actual network
3511+ interface address, instead of the loopback one.
3512+ For example:
3513+ ;; Server IP to listen on
3514+ address = 192.168.1.162
3515+ -s, --server <host> The hostname of the Landscape server the client
3516+ should connect to.
3517+ -a, --account <account> The name of the Landscape account to use.
3518+ -p, --password <password> The password for the Landscape account.
3519+ -P, --profile <profile> Package profile to use, can be server or
3520+ desktop.
3521+ -k, --ssl-key <key> Specify an SSL key to be used in the client
3522+ config.
3523+ -r, --repository <ppa> Specify the PPA holding the client packages.
3524+ -b, --build <yes|no> If yes, the landscape-client packages from this
3525+ branch will be built and installed inside the
3526+ VM, otherwise they will be pulled from the APT
3527+ repositories.
3528+
3529+For example, this script can be invoked like this:
3530+
3531+./dev/landscape-client-vm --password <LANDSCAPE_DEVEL_ACCOUNT_PW> intrepid
3532+
3533+where <LANDSCAPE_DEVEL_ACCOUNT_PW> is the account password of the
3534+landscape-devel account on the Landscape staging server (or you can specify
3535+another account with the --account parameter).
3536+
3537+The built VM will be stored under ./build/intrepid along with some other
3538+files. To launch the VM, cd to ./build/intrepid and issue:
3539+$ ./run
3540+Once it's booted you can log into it with:
3541+$ ./ssh
3542+EOF
3543+}
3544+
3545+OPTS=$(getopt -o hm:s:a:p:P:k:r:b: --long help,mirror:,server:,account:,password:,profile:,ssl-key:,repository:,build: -- "$@")
3546+
3547+if [ $? != 0 ]; then
3548+ exit 1
3549+fi
3550+
3551+eval set -- "$OPTS"
3552+
3553+MIRROR=http://archive.ubuntu.com/ubuntu
3554+SERVER=staging.landscape.canonical.com
3555+ACCOUNT=landscape-devel
3556+PASSWORD=
3557+PROFILE=server
3558+SSL_KEY=
3559+PPA=landscape/trunk
3560+BUILD=yes
3561+
3562+while true ; do
3563+ case "$1" in
3564+ -h|--help) help; exit 1; shift ;;
3565+ -m|--mirror) MIRROR=$2; shift 2 ;;
3566+ -s|--server) SERVER=$2; shift 2;;
3567+ -a|--account) ACCOUNT=$2; shift 2;;
3568+ -p|--password) PASSWORD=$2; shift 2;;
3569+ -P|--profile) PROFILE=$2; shift 2;;
3570+ -S|--ssl-key) SSL_KEY=$2; shift 2;;
3571+ -r|--repository) PPA=$2; shift 2;;
3572+ -b|--build) BUILD=$2; shift 2;;
3573+ --) shift ; break ;;
3574+ *) echo "Internal error!" ; exit 1 ;;
3575+ esac
3576+done
3577+
3578+if [ "$1" = "" ]; then
3579+ help
3580+ exit
3581+fi
3582+
3583+RELEASE=$1
3584+TOPDIR=$(pwd)/build/${RELEASE}-${PROFILE}
3585+SSH_KEY=$TOPDIR/ssh_key
3586+SSH_PORT=3322
3587+ROOTSIZE=8192
3588+
3589+rm -fR $TOPDIR
3590+mkdir -p $TOPDIR
3591+ssh-keygen -N '' -f $SSH_KEY
3592+
3593+cd $TOPDIR
3594+
3595+cat > config <<EOF
3596+[client]
3597+url = https://${SERVER}/message-system
3598+computer_title = ${RELEASE} test VM $$
3599+data_path = /var/lib/landscape/client
3600+script_users = ALL
3601+ping_url = http://${SERVER}/ping
3602+include_manager_plugins = ScriptExecution
3603+account_name = ${ACCOUNT}
3604+registration_password = ${PASSWORD}
3605+#log_level = debug
3606+EOF
3607+
3608+if ! [ "$WITH_SSL" = "" ]; then
3609+ echo ssl_public_key = $SSL_KEY >> config
3610+fi
3611+
3612+cat > script-wrapper <<EOF
3613+#!/bin/sh -e
3614+chroot \$1 /root/script
3615+EOF
3616+chmod 755 script-wrapper
3617+
3618+cat> ppa-key <<EOF
3619+-----BEGIN PGP PUBLIC KEY BLOCK-----
3620+Version: SKS 1.0.10
3621+
3622+mI0ESXN/egEEAOgRYISU9dnQm4BB5ZEEwKT+NKUDNd/DhMYdtBMw9Yk7S5cyoqpbtwoPJVzK
3623+AXxq+ng5e3yYypSv98pLMr5UF09FGaeyGlD4s1uaVFWkFCO4jsTg7pWIY6qzO/jMxB5+Yu/G
3624+0GjWQMNKxFk0oHMa0PhNBZtdPacVz65mOVmCsh/lABEBAAG0G0xhdW5jaHBhZCBQUEEgZm9y
3625+IExhbmRzY2FwZYi2BBMBAgAgBQJJc396AhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ
3626+boWobkZStOb+rwP+ONKUWeX+MTIPqGWkknBPV7jm8nyyIUojC4IhS+9YR6GYnn0hMABSkEHm
3627+IV73feKmrT2GESYI1UdYeKiOkWsPN/JyBk+eTvKet0qsw5TluqiHSW+LEi/+zUyrS3dDMX3o
3628+yaLgYa+UkjIyxnaKLkQuCiS+D+fYwnJulIkhaKObtdE=
3629+=UwRd
3630+-----END PGP PUBLIC KEY BLOCK-----
3631+EOF
3632+
3633+cat > script <<EOF
3634+#!/bin/sh -e
3635+chown landscape /etc/landscape/client.conf
3636+chmod 600 /etc/landscape/client.conf
3637+apt-key add /root/ppa-key
3638+echo "RUN=1" > /etc/default/landscape-client
3639+EOF
3640+chmod 755 script
3641+
3642+cat > manifest <<EOF
3643+ppa-key /root
3644+script /root/script
3645+config /etc/landscape/client.conf
3646+EOF
3647+
3648+if [ "$WITH_SSL" = "yes" ]; then
3649+ echo /etc/landscape/certs/sample_ca.crt /etc/landscape/client.conf.ssl_public_key >> manifest
3650+fi
3651+
3652+cat > ssh <<EOF
3653+#!/bin/sh
3654+exec ssh -p $SSH_PORT -i $SSH_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost
3655+EOF
3656+chmod 755 ssh
3657+
3658+cat > run <<EOF
3659+#!/bin/sh
3660+exec kvm --redir tcp:$SSH_PORT::22 -m 1280 -smp 1 -drive file=$TOPDIR/ubuntu-kvm/disk0.qcow2 "$@"
3661+EOF
3662+chmod 755 run
3663+
3664+ADDPKGS="--addpkg=landscape-client --addpkg=openssh-server"
3665+
3666+if [ "$PROFILE" = "server" ]; then
3667+ ADDPKGS="$ADDPKGS --addpkg apache2-mpm-prefork --addpkg postgresql --addpkg postfix"
3668+else
3669+ ADDPKGS="$ADDPKGS --addpkg ubuntu-desktop"
3670+fi
3671+
3672+if [ -n "$TMPDIR" ]; then
3673+ TEMP_DIR_OPT="-t $TMPDIR"
3674+fi
3675+
3676+sudo ubuntu-vm-builder kvm "$RELEASE" --rootsize=$ROOTSIZE --mirror="$MIRROR" --ppa="$PPA" $ADDPKGS --execscript=./script-wrapper --copy=manifest --ssh-key=$SSH_KEY.pub $TEMP_DIR_OPT
3677
3678=== added file 'dev/run-piuparts'
3679--- dev/run-piuparts 1970-01-01 00:00:00 +0000
3680+++ dev/run-piuparts 2012-04-22 14:14:27 +0000
3681@@ -0,0 +1,154 @@
3682+#!/bin/sh -e
3683+
3684+help () {
3685+ cat <<EOF
3686+$0 [OPTION]: run piuparts against landscape-client packages built from a branch
3687+
3688+The script checks if packaging changes (i.e. modifications to debian/ files) have
3689+been introduced in the latest commit of the branch, and if so builds fresh
3690+packages and run piuparts against them.
3691+
3692+The first time it's run, this script automatically creates a pbuilder chroot
3693+for the same Ubuntu release the system is running. The chroot will be saved
3694+under /var/cache/pbuilder and re-used in subsequent runs.
3695+
3696+The piuparts output will be available under build/piuparts/output.log.
3697+
3698+Available options:
3699+
3700+ -m, --mirror <mirror> The Ubuntu mirror to use to build the pbuilder used
3701+ by piuparts chroot.
3702+ -f, --force Force running the tests, even if the debian/ directory
3703+ hasn't been changed in the last bzr commit.
3704+EOF
3705+}
3706+
3707+#
3708+# Check if X is running, if not abort because we would make X crash (D-Bus!)
3709+#
3710+if pidof X > /dev/null; then
3711+ cat <<EOF
3712+It appears you're running an X session. This script would kill your session
3713+due to landscape-client reloading dbus in its postinst script. Quitting now.
3714+EOF
3715+ exit 1
3716+fi
3717+
3718+#
3719+# Check we have piuparts >= 0.36
3720+#
3721+PIUPARTS_VERSION=$(sudo piuparts --version 2>/dev/null| cut -f 2 -d " ")
3722+if ! dpkg --compare-versions $PIUPARTS_VERSION ge 0.36; then
3723+ cat <<EOF
3724+You need piuparts 0.36 or higher
3725+EOF
3726+ exit 1
3727+fi
3728+
3729+#
3730+# Parse command line arguments
3731+#
3732+OPTS=$(getopt -o hm:f --long help,mirror:,force -- "$@")
3733+if [ $? != 0 ]; then
3734+ exit 1
3735+fi
3736+eval set -- "$OPTS"
3737+
3738+MIRROR=http://archive.ubuntu.com/ubuntu
3739+FORCE=no
3740+
3741+while true ; do
3742+ case "$1" in
3743+ -h|--help) help; exit 1; shift ;;
3744+ -m|--mirror) MIRROR=$2; shift 2 ;;
3745+ -f|--force) FORCE=yes; shift 1 ;;
3746+ --) shift ; break ;;
3747+ *) echo "Internal error!" ; exit 1 ;;
3748+ esac
3749+done
3750+
3751+#
3752+# Check bzr changes under debian/
3753+#
3754+if [ "${FORCE}" = "no" ]; then
3755+ if ! bzr diff -r revno:-1|diffstat -l|grep -q "^debian/.*"; then
3756+ echo "No packaging changes, skipping piuparts tests."
3757+ exit 0
3758+ fi
3759+fi
3760+
3761+#
3762+# Export the sources
3763+#
3764+TOPDIR=$(pwd)/build/piuparts
3765+RELEASE=$(lsb_release -cs)
3766+SOURCE=$(dpkg-parsechangelog |grep "^Source:" | cut -f 2 -d " ")
3767+VERSION=$(dpkg-parsechangelog |grep "^Version:" | cut -f 2 -d " ")
3768+ARCH=$(dpkg --print-architecture)
3769+rm -rf $TOPDIR
3770+mkdir -p $TOPDIR
3771+bzr export $TOPDIR/$SOURCE-$VERSION
3772+
3773+#
3774+# Build the package
3775+#
3776+cd $TOPDIR/$SOURCE-$VERSION
3777+dpkg-buildpackage -rfakeroot -b -uc -us
3778+cd $TOPDIR
3779+
3780+BASETGZ=/var/cache/pbuilder/${SOURCE}-${RELEASE}-${ARCH}.tgz
3781+if ! [ -e "$BASETGZ" ]; then
3782+ # Create the pbuilder chroot
3783+ COMPONENTS="main universe multiverse restricted"
3784+ OTHERMIRROR="deb ${MIRROR} ${RELEASE}-updates ${COMPONENTS}"
3785+
3786+ if [ "${RELEASE}" = "hardy" ] || [ "${RELEASE}" = "dapper" ]; then
3787+ LANDSCAPE_REPO="deb http://landscape.canonical.com/packages/${RELEASE} ./"
3788+ OTHERMIRROR="${OTHERMIRROR} | ${LANDSCAPE_REPO}"
3789+ fi
3790+
3791+ sudo pbuilder \
3792+ --create \
3793+ --distribution ${RELEASE} \
3794+ --mirror ${MIRROR} \
3795+ --components "${COMPONENTS}" \
3796+ --othermirror "${OTHERMIRROR}" \
3797+ --basetgz ${BASETGZ}
3798+else
3799+ # Update the pbuilder chroot
3800+ sudo pbuilder \
3801+ --update \
3802+ --basetgz ${BASETGZ}
3803+fi
3804+
3805+#
3806+# Run piuparts
3807+#
3808+
3809+# Workaround a bug in policykit not purging correctly
3810+mkdir -p ${TOPDIR}/scripts/
3811+cat > ${TOPDIR}/scripts/post_purge_policy_kit <<EOF
3812+#!/bin/sh
3813+rm -rf /var/lib/PolicyKit/user-haldaemon.auths
3814+EOF
3815+chmod 755 ${TOPDIR}/scripts/post_purge_policy_kit
3816+
3817+sudo piuparts \
3818+ --scriptsdir=${TOPDIR}/scripts/ \
3819+ --keep-sources-list \
3820+ --skip-minimize \
3821+ --no-symlinks \
3822+ -i /var/lib/PolicyKit \
3823+ -i /etc/ssl \
3824+ -I "/etc/udev.*" \
3825+ -I "/lib/udev/.*" \
3826+ -I "/var/lib/.*" \
3827+ -I "/usr/lib/python2.6/dist-packages/twisted.*" \
3828+ -i /etc/X11 \
3829+ -i /etc/dbus-1 \
3830+ -i /etc/dbus-1/system.d \
3831+ -I "/usr/lib/python2.4/site-packages/apt.*" \
3832+ -I "/usr/lib/python2.4/site-packages/dbus.*" \
3833+ -I "/usr/lib/python2.5/site-packages/twisted.*" \
3834+ -b ${BASETGZ} \
3835+ ${SOURCE}_${VERSION}_${ARCH}.changes
3836
3837=== added file 'dev/upload-to-ppa'
3838--- dev/upload-to-ppa 1970-01-01 00:00:00 +0000
3839+++ dev/upload-to-ppa 2012-04-22 14:14:27 +0000
3840@@ -0,0 +1,123 @@
3841+#!/bin/sh -e
3842+
3843+help () {
3844+ cat <<EOF
3845+Invoke this script from a $package bzr branch to build source packages for
3846+all target distributions and upload them to a PPA.
3847+
3848+Options:
3849+
3850+ -p=<PPA>|--ppa=<PPA> The PPA to upload to. This gets passed to dput, please
3851+ make sure you have a matching stanza in your ~/.dput.cf
3852+
3853+ -k=<KEY>|--key=<KEY> The GPG key used to sign the packages
3854+
3855+ -s|--snapshot Tweak the Debian revision by including the current bzr
3856+ revision number in it (e.g. 1.4.0~bzr178-0ubuntu0.8.04)
3857+
3858+ -h|--help Print this help and exit
3859+
3860+EOF
3861+ exit
3862+}
3863+
3864+#
3865+# Check if we are in a bzr branch
3866+#
3867+if ! [ -d .bzr ] || ! [ -f debian/changelog ]; then
3868+ echo "Error: not in a package bzr branch"
3869+ echo
3870+ help
3871+fi
3872+
3873+#
3874+# Set defaults and parse command line arguments
3875+#
3876+ppa=landscape
3877+key=free.ekanayaka@canonical.com
3878+snapshot=no
3879+package=$(dpkg-parsechangelog |grep ^Source|cut -f 2 -d " ")
3880+version=$(dpkg-parsechangelog |grep ^Version|cut -f 2 -d " ")
3881+upstream=$(echo $version | cut -f 1 -d "-")
3882+
3883+for i in $*; do
3884+ case $i in
3885+ -p=*|--ppa=*)
3886+ ppa=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
3887+ ;;
3888+ -k=*|--key=*)
3889+ key=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
3890+ ;;
3891+ -s|--snapshot)
3892+ snapshot=yes
3893+ ;;
3894+ -h|--help)
3895+ help
3896+ ;;
3897+ *)
3898+ echo "Error: unknown option $i"
3899+ echo
3900+ help
3901+ ;;
3902+ esac
3903+done
3904+
3905+if [ "$snapshot" = "yes" ]; then
3906+ bzr_rev=$(bzr log -l 1|grep ^revno|cut -f 2 -d " ")
3907+ upstream="$upstream~bzr$bzr_rev"
3908+fi
3909+
3910+#
3911+# Clean up from possible previous runs
3912+#
3913+rm -fR ../${package}-*
3914+rm -f ../${package}_*
3915+
3916+#
3917+# Export the sources
3918+#
3919+bzr export ../${package}-${upstream}
3920+cd ..
3921+cp -a ${package}-${upstream} ${package}-${upstream}.orig
3922+rm -R ${package}-${upstream}.orig/debian
3923+cd ${package}-${upstream}
3924+
3925+#
3926+# Build source packages and upload them
3927+#
3928+releases="hardy_8.04 karmic_9.10 lucid_10.04 maverick_10.10 natty_11.04 oneiric_11.10"
3929+
3930+if [ "$snapshot" = "yes" ]; then
3931+ # Snapshot, we'll add a dummy changelog entry like for all releases
3932+ source_opt="-sa"
3933+ releases="$releases natty_11.04"
3934+else
3935+ # Actual release, use the latest changelog entry and upload now
3936+ dpkg-buildpackage -S -sa -k$key
3937+ dput $ppa ../${package}_${version}_source.changes
3938+ source_opt="-sd"
3939+fi
3940+
3941+for release in $releases; do
3942+
3943+ codename=$(echo $release|cut -f 1 -d _)
3944+ revision=0ubuntu0.$(echo $release|cut -f 2 -d _)
3945+ if ! [ "$snapshot" = "yes" ]; then
3946+ revision=${revision}.0~landscape1
3947+ fi
3948+ version=$upstream-$revision
3949+
3950+ if [ "$snapshot" = "yes" ]; then
3951+ message="Snapshot build for $codename"
3952+ else
3953+ message="Built for $codename, no source changes"
3954+ fi
3955+ cp debian/changelog ../
3956+ dch --force-distribution -b -v $version -D $codename -m $message
3957+ dpkg-buildpackage -S $source_opt -k$key
3958+ dput $ppa ../${package}_${version}_source.changes
3959+ mv ../changelog debian
3960+
3961+ source_opt="-sd"
3962+
3963+done
3964
3965=== added directory 'glib-2.0'
3966=== renamed directory 'glib-2.0' => 'glib-2.0.moved'
3967=== added directory 'glib-2.0/schemas'
3968=== added file 'glib-2.0/schemas/com.canonical.landscape-client-settings.gschema.xml'
3969--- glib-2.0/schemas/com.canonical.landscape-client-settings.gschema.xml 1970-01-01 00:00:00 +0000
3970+++ glib-2.0/schemas/com.canonical.landscape-client-settings.gschema.xml 2012-04-22 14:14:27 +0000
3971@@ -0,0 +1,37 @@
3972+<?xml version="1.0" encoding="utf-8"?>
3973+<schemalist>
3974+ <schema id="com.canonical.landscape-client-settings" path="/com/canonical/landscape-client-settings/">
3975+ <key type="s" name="management-type">
3976+ <default>"not"</default>
3977+ <summary>Whether the client settings UI currently set to a hosted client configuration, an LDS instance or no management service.</summary>
3978+ </key>
3979+ <key type="s" name="computer-title">
3980+ <default>""</default>
3981+ <summary>The title to register the machine with.</summary>
3982+ </key>
3983+ <key type="s" name="hosted-landscape-host">
3984+ <default>"landscape.canonical.com"</default>
3985+ <summary>The hostname of the Canonical hosted landscape system.</summary>
3986+ </key>
3987+ <key type="s" name="hosted-account-name">
3988+ <default>""</default>
3989+ <summary>An account name for use with the Canonical hosted landscape system.</summary>
3990+ </key>
3991+ <key type="s" name="hosted-password">
3992+ <default>""</default>
3993+ <summary>A password for use with the Canonical hosted landscape system</summary>
3994+ </key>
3995+ <key type="s" name="local-landscape-host">
3996+ <default>""</default>
3997+ <summary>The hostname of the local landscape system.</summary>
3998+ </key>
3999+ <key type="s" name="local-account-name">
4000+ <default>""</default>
4001+ <summary>An account name for use with the local landscape system.</summary>
4002+ </key>
4003+ <key type="s" name="local-password">
4004+ <default>""</default>
4005+ <summary>A password for use with the local landscape system</summary>
4006+ </key>
4007+ </schema>
4008+</schemalist>
4009
4010=== added directory 'icons'
4011=== renamed directory 'icons' => 'icons.moved'
4012=== added file 'icons/preferences-management-service.svg'
4013--- icons/preferences-management-service.svg 1970-01-01 00:00:00 +0000
4014+++ icons/preferences-management-service.svg 2012-04-22 14:14:27 +0000
4015@@ -0,0 +1,62 @@
4016+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
4017+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In -->
4018+
4019+<svg
4020+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4021+ xmlns:cc="http://creativecommons.org/ns#"
4022+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4023+ xmlns:svg="http://www.w3.org/2000/svg"
4024+ xmlns="http://www.w3.org/2000/svg"
4025+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
4026+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
4027+ version="1.1"
4028+ x="0px"
4029+ y="0px"
4030+ width="32"
4031+ height="32"
4032+ viewBox="-0.787 -0.867 32 32"
4033+ enable-background="new -0.787 -0.867 285 285"
4034+ xml:space="preserve"
4035+ id="svg2"
4036+ inkscape:version="0.48.2 r9819"
4037+ sodipodi:docname="canonical_aubergine_hex.svg"><metadata
4038+ id="metadata12"><rdf:RDF><cc:Work
4039+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
4040+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
4041+ pagecolor="#ffffff"
4042+ bordercolor="#666666"
4043+ borderopacity="1"
4044+ objecttolerance="10"
4045+ gridtolerance="10"
4046+ guidetolerance="10"
4047+ inkscape:pageopacity="0"
4048+ inkscape:pageshadow="2"
4049+ inkscape:window-width="697"
4050+ inkscape:window-height="480"
4051+ id="namedview10"
4052+ showgrid="false"
4053+ fit-margin-top="0"
4054+ fit-margin-left="0"
4055+ fit-margin-right="0"
4056+ fit-margin-bottom="0"
4057+ inkscape:zoom="7.38"
4058+ inkscape:cx="15.9035"
4059+ inkscape:cy="16.176"
4060+ inkscape:window-x="449"
4061+ inkscape:window-y="100"
4062+ inkscape:window-maximized="0"
4063+ inkscape:current-layer="svg2" />
4064+<defs
4065+ id="defs4">
4066+</defs>
4067+<path
4068+ d="m 15.21339,25.32101 c -5.62692,0 -10.18809,-4.55982 -10.18809,-10.18812 0,-5.62706 4.56117,-10.18768 10.18809,-10.18768 5.62705,0 10.18798,4.56062 10.18798,10.18768 0,5.6283 -4.56082,10.18812 -10.18798,10.18812 z"
4069+ id="path6"
4070+ inkscape:connector-curvature="0"
4071+ style="fill:#772953" />
4072+<path
4073+ d="M 31.213,15.13334 C 31.213,23.96956 24.04959,31.133 15.21294,31.133 6.37607,31.133 -0.787,23.96945 -0.787,15.13334 -0.787,6.29621 6.37607,-0.867 15.21306,-0.867 24.04959,-0.867 31.213,6.29621 31.213,15.13334 z M 15.21306,3.025 c -6.68751,0 -12.10774,5.42115 -12.10774,12.10823 0,6.68809 5.42023,12.10755 12.10774,12.10755 6.68773,0 12.10796,-5.41946 12.10796,-12.10755 C 27.32102,8.44615 21.90079,3.025 15.21306,3.025 z"
4074+ id="path8"
4075+ inkscape:connector-curvature="0"
4076+ style="fill:#772953" />
4077+</svg>
4078\ No newline at end of file
4079
4080=== added directory 'landscape'
4081=== added file 'landscape-client.conf'
4082--- landscape-client.conf 1970-01-01 00:00:00 +0000
4083+++ landscape-client.conf 2012-04-22 14:14:27 +0000
4084@@ -0,0 +1,12 @@
4085+[client]
4086+bus = session
4087+computer_title = John's PC
4088+account_name = onward
4089+registration_password =
4090+url = http://localhost:8080/message-system
4091+data_path = /tmp/landscape/
4092+log_dir = /tmp/landscape/
4093+log_level = debug
4094+pid_file = /tmp/landscape/landscape-client.pid
4095+ping_url = http://localhost:8081/ping
4096+
4097
4098=== renamed file 'landscape-client.conf' => 'landscape-client.conf.moved'
4099=== renamed directory 'landscape' => 'landscape.moved'
4100=== added file 'landscape/__init__.py'
4101--- landscape/__init__.py 1970-01-01 00:00:00 +0000
4102+++ landscape/__init__.py 2012-04-22 14:14:27 +0000
4103@@ -0,0 +1,57 @@
4104+import sys
4105+
4106+DEBIAN_REVISION = ""
4107+UPSTREAM_VERSION = "12.04.2"
4108+VERSION = "%s%s" % (UPSTREAM_VERSION, DEBIAN_REVISION)
4109+
4110+# The "server-api" field of outgoing messages will be set to this value, and
4111+# used by the server message system to lookup the correct MessageAPI adapter
4112+# for handling the messages sent by the client. Bump it when the schema of any
4113+# of the messages sent by the client changes in a backward-incompatible way.
4114+#
4115+# Changelog:
4116+#
4117+# 3.2:
4118+# * Add new "eucalyptus-info" and "eucalyptus-info-error" messages.
4119+#
4120+SERVER_API = "3.2"
4121+
4122+# XXX This is needed for backward compatibility in the server code importing
4123+# the API variable. We should eventually replace it in the server code.
4124+API = SERVER_API
4125+
4126+# The "client-api" field of outgoing messages will be set to this value, and
4127+# used by the server to know which schema do the message types accepted by the
4128+# client support. Bump it when the schema of an accepted message type changes
4129+# and update the changelog below as needed.
4130+#
4131+# Changelog:
4132+#
4133+# 3.3:
4134+# * Add "binaries" field to "change-packages"
4135+# * Add "policy" field to "change-packages"
4136+# * Add new "change-package-locks" client accepted message type.
4137+#
4138+CLIENT_API = "3.3"
4139+
4140+from twisted.python import util
4141+
4142+
4143+def initgroups(uid, gid):
4144+ """Initializes the group access list.
4145+
4146+ It replaces the default implementation of Twisted which iterates other all
4147+ groups, using the system call C{initgroups} instead. This wrapper just
4148+ translates the numeric C{uid} to a user name understood by C{initgroups}.
4149+ """
4150+ import pwd
4151+ from landscape.lib.initgroups import initgroups as cinitgroups
4152+ return cinitgroups(pwd.getpwuid(uid).pw_name, gid)
4153+
4154+
4155+if "twisted.python._initgroups" not in sys.modules:
4156+ # Patch twisted initgroups implementation, which can result in very long
4157+ # calls to grp.getrlall(). See http://twistedmatrix.com/trac/ticket/3226
4158+ # We can remove that bit when Lucid is our oldest supported version
4159+ # (May 2013).
4160+ util.initgroups = initgroups
4161
4162=== added file 'landscape/accumulate.py'
4163--- landscape/accumulate.py 1970-01-01 00:00:00 +0000
4164+++ landscape/accumulate.py 2012-04-22 14:14:27 +0000
4165@@ -0,0 +1,112 @@
4166+"""
4167+The accumulation logic generates data points for times that are a
4168+multiple of a step size. In other words, if the step size is 300
4169+seconds, any data reported by the accumulation code will always be for
4170+a timestamp that is a multiple of 300. The purpose of this behaviour
4171+is to (a) limit the amount of data that is sent to the server and (b)
4172+provide data in a predictable format to make server-side handling of
4173+the data straight-forward. A nice side-effect of providing data at a
4174+known step-interval is that the server can detect blackholes in the
4175+data simply by testing for the absence of data points at step
4176+intervals.
4177+
4178+Limiting the amount of data sent to the server and making the data
4179+format predictable are both desirable attributes, but we need to
4180+ensure the data reported is accurate. We can't rely on plugins to
4181+report data exactly at step boundaries and even if we could we
4182+wouldn't necessarily end up with data points that are representative
4183+of the resource being monitored. We need a way to calculate a
4184+representative data point from the set of data points that a plugin
4185+provided during a step period.
4186+
4187+Suppose we want to calculate data points for timestamps 300 and 600.
4188+Assume a plugin runs at an interval less than 300 seconds to get
4189+values to provide to the accumulator. Each value received by the
4190+accumulator is used to update a data point that will be sent to the
4191+server when we cross the step boundary. The algorithm, based on
4192+derivatives, is:
4193+
4194+ (current time - previous time) * value + last accumulated value
4195+
4196+If the 'last accumulated value' isn't available, it defaults to 0.
4197+For example, consider these timestamp/load average measurements:
4198+300/2.0, 375/3.0, 550/3.5 and 650/0.5. Also assume we have no data
4199+prior to 300/2.0. This data would be processed as follows:
4200+
4201+ Input Calculation Accumulated Value
4202+ ----- ----------- -----------------
4203+ 300/2.0 (300 - 300) * 2.0 + 0 0.0
4204+
4205+ 375/3.0 (375 - 300) * 3.0 + 0.0 225.0
4206+
4207+ 550/3.5 (550 - 375) * 3.5 + 225.0 837.5
4208+
4209+ 650/0.5 (600 - 550) * 0.5 + 837.5 862.5
4210+
4211+Notice that the last value crosses a step boundary; the calculation
4212+for this value is:
4213+
4214+ (step boundary time - previous time) * value + last accumulated value
4215+
4216+This yields the final accumulated value for the step period we've just
4217+traversed. The data point sent to the server is generated using the
4218+following calculation:
4219+
4220+ accumulated value / step interval size
4221+
4222+The data point sent to the server in our example would be:
4223+
4224+ 862.5 / 300 = 2.875
4225+
4226+This value is representative of the activity that actually occurred
4227+and is returned to the plugin to queue for delivery to the server.
4228+The accumulated value for the next interval is calculated using the
4229+portion of time that crossed into the new step period:
4230+
4231+ Input Calculation Accumulated Value
4232+ ----- ----------- -----------------
4233+ 650/0.5 (650 - 600) * 0.5 + 0 25
4234+
4235+And so the logic goes, continuing in a similar fashion, yielding
4236+representative data at each step boundary.
4237+"""
4238+
4239+class Accumulator(object):
4240+
4241+ def __init__(self, persist, step_size):
4242+ self._persist = persist
4243+ self._step_size = step_size
4244+
4245+ def __call__(self, new_timestamp, new_free_space, key):
4246+ previous_timestamp, accumulated_value = self._persist.get(key, (0, 0))
4247+ accumulated_value, step_data = \
4248+ accumulate(previous_timestamp, accumulated_value,
4249+ new_timestamp, new_free_space, self._step_size)
4250+ self._persist.set(key, (new_timestamp, accumulated_value))
4251+ return step_data
4252+
4253+
4254+def accumulate(previous_timestamp, accumulated_value,
4255+ new_timestamp, new_value,
4256+ step_size):
4257+ previous_step = previous_timestamp // step_size
4258+ new_step = new_timestamp // step_size
4259+ step_boundary = new_step * step_size
4260+ step_diff = new_step - previous_step
4261+ step_data = None
4262+
4263+ if step_diff == 0:
4264+ diff = new_timestamp - previous_timestamp
4265+ accumulated_value += diff * new_value
4266+ elif step_diff == 1:
4267+ diff = step_boundary - previous_timestamp
4268+ accumulated_value += diff * new_value
4269+ step_value = float(accumulated_value) / step_size
4270+ step_data = (step_boundary, step_value)
4271+ diff = new_timestamp - step_boundary
4272+ accumulated_value = diff * new_value
4273+ else:
4274+ diff = new_timestamp - step_boundary
4275+ accumulated_value = diff * new_value
4276+
4277+ return accumulated_value, step_data
4278
4279=== added file 'landscape/amp.py'
4280--- landscape/amp.py 1970-01-01 00:00:00 +0000
4281+++ landscape/amp.py 2012-04-22 14:14:27 +0000
4282@@ -0,0 +1,107 @@
4283+import os
4284+import logging
4285+
4286+from landscape.lib.amp import (
4287+ MethodCallProtocol, MethodCallFactory, RemoteObjectConnector)
4288+
4289+
4290+class ComponentProtocol(MethodCallProtocol):
4291+ """Communication protocol between the various Landscape components.
4292+
4293+ It can be used both as server-side protocol for exposing the methods of a
4294+ certain Landscape component, or as client-side protocol for connecting to
4295+ another Landscape component we want to call the methods of.
4296+ """
4297+ methods = ["ping", "exit"]
4298+ timeout = 60
4299+
4300+
4301+class ComponentProtocolFactory(MethodCallFactory):
4302+
4303+ protocol = ComponentProtocol
4304+ initialDelay = 0.05
4305+
4306+
4307+class RemoteComponentConnector(RemoteObjectConnector):
4308+ """Utility superclass for creating connections with a Landscape component.
4309+
4310+ @cvar component: The class of the component to connect to, it is expected
4311+ to define a C{name} class attribute, which will be used to find out
4312+ the socket to use. It must be defined by sub-classes.
4313+
4314+ @param reactor: A L{TwistedReactor} object.
4315+ @param config: A L{LandscapeConfiguration}.
4316+ @param args: Positional arguments for protocol factory constructor.
4317+ @param kwargs: Keyword arguments for protocol factory constructor.
4318+
4319+ @see: L{MethodCallClientFactory}.
4320+ """
4321+
4322+ factory = ComponentProtocolFactory
4323+
4324+ def __init__(self, reactor, config, *args, **kwargs):
4325+ self._twisted_reactor = reactor
4326+ socket = os.path.join(config.sockets_path,
4327+ self.component.name + ".sock")
4328+ super(RemoteComponentConnector, self).__init__(
4329+ self._twisted_reactor._reactor, socket, *args, **kwargs)
4330+
4331+ def connect(self, max_retries=None, factor=None, quiet=False):
4332+ """Connect to the remote Landscape component.
4333+
4334+ If the connection is lost after having been established, and then
4335+ it is established again by the reconnect mechanism, an event will
4336+ be fired.
4337+
4338+ @param max_retries: If given, the connector will keep trying to connect
4339+ up to that number of times, if the first connection attempt fails.
4340+ @param factor: Optionally a float indicating by which factor the
4341+ delay between subsequent retries should increase. Smaller values
4342+ result in a faster reconnection attempts pace.
4343+ @param quiet: A boolean indicating whether to log errors.
4344+ """
4345+
4346+ def fire_reconnect(remote):
4347+ self._twisted_reactor.fire("%s-reconnect" %
4348+ self.component.name)
4349+
4350+ def connected(remote):
4351+ self._factory.add_notifier(fire_reconnect)
4352+ return remote
4353+
4354+ def log_error(failure):
4355+ logging.error("Error while connecting to %s", self.component.name)
4356+ return failure
4357+
4358+ result = super(RemoteComponentConnector, self).connect(
4359+ max_retries=max_retries, factor=factor)
4360+ if not quiet:
4361+ result.addErrback(log_error)
4362+ result.addCallback(connected)
4363+ return result
4364+
4365+
4366+class RemoteComponentsRegistry(object):
4367+ """
4368+ A global registry for looking up Landscape component connectors by name.
4369+ """
4370+
4371+ _by_name = {}
4372+
4373+ @classmethod
4374+ def get(cls, name):
4375+ """Get the connector class for the given Landscape component.
4376+
4377+ @param name: Name of the Landscape component we want to connect to, for
4378+ instance C{monitor} or C{manager}.
4379+ """
4380+ return cls._by_name[name]
4381+
4382+ @classmethod
4383+ def register(cls, connector_class):
4384+ """Register a connector for a Landscape component.
4385+
4386+ @param connector_class: A sub-class of L{RemoteComponentConnector}
4387+ that can be used to connect to a certain component.
4388+ """
4389+ cls._by_name[connector_class.component.name] = connector_class
4390
4391=== added directory 'landscape/broker'
4392=== added file 'landscape/broker/__init__.py'
4393--- landscape/broker/__init__.py 1970-01-01 00:00:00 +0000
4394+++ landscape/broker/__init__.py 2012-04-22 14:14:27 +0000
4395@@ -0,0 +1,3 @@
4396+"""
4397+The broker mediates communication with client components to the server.
4398+"""
4399
4400=== added file 'landscape/broker/amp.py'
4401--- landscape/broker/amp.py 1970-01-01 00:00:00 +0000
4402+++ landscape/broker/amp.py 2012-04-22 14:14:27 +0000
4403@@ -0,0 +1,142 @@
4404+from twisted.internet.defer import maybeDeferred, execute, succeed
4405+
4406+from landscape.lib.amp import RemoteObject
4407+from landscape.amp import (
4408+ ComponentProtocol, ComponentProtocolFactory, RemoteComponentConnector,
4409+ RemoteComponentsRegistry)
4410+from landscape.broker.server import BrokerServer
4411+from landscape.broker.client import BrokerClient
4412+from landscape.monitor.monitor import Monitor
4413+from landscape.manager.manager import Manager
4414+
4415+
4416+class BrokerServerProtocol(ComponentProtocol):
4417+ """
4418+ Communication protocol between the broker server and its clients.
4419+ """
4420+ methods = (ComponentProtocol.methods +
4421+ ["fire_event",
4422+ "get_accepted_message_types",
4423+ "get_server_uuid",
4424+ "is_message_pending",
4425+ "register",
4426+ "register_client",
4427+ "register_client_accepted_message_type",
4428+ "reload_configuration",
4429+ "send_message",
4430+ "stop_clients",
4431+ "listen_events"])
4432+
4433+
4434+class BrokerServerProtocolFactory(ComponentProtocolFactory):
4435+
4436+ protocol = BrokerServerProtocol
4437+
4438+
4439+class RemoteBroker(RemoteObject):
4440+
4441+ def call_if_accepted(self, type, callable, *args):
4442+ """Call C{callable} if C{type} is an accepted message type."""
4443+ deferred_types = self.get_accepted_message_types()
4444+
4445+ def got_accepted_types(result):
4446+ if type in result:
4447+ return callable(*args)
4448+ deferred_types.addCallback(got_accepted_types)
4449+ return deferred_types
4450+
4451+ def call_on_event(self, handlers):
4452+ """Call a given handler as soon as a certain event occurs.
4453+
4454+ @param handlers: A dictionary mapping event types to callables, where
4455+ an event type is string (the name of the event). When the first of
4456+ the given event types occurs in the broker reactor, the associated
4457+ callable will be fired.
4458+ """
4459+ result = self.listen_events(handlers.keys())
4460+ return result.addCallback(lambda event_type: handlers[event_type]())
4461+
4462+
4463+class FakeRemoteBroker(object):
4464+ """Looks like L{RemoteBroker}, but actually talks to local objects."""
4465+
4466+ def __init__(self, exchanger, message_store):
4467+ self.exchanger = exchanger
4468+ self.message_store = message_store
4469+ self.protocol = BrokerServerProtocol()
4470+
4471+ def ping(self):
4472+ return succeed(True)
4473+
4474+ def call_if_accepted(self, type, callable, *args):
4475+ if type in self.message_store.get_accepted_types():
4476+ return maybeDeferred(callable, *args)
4477+ return succeed(None)
4478+
4479+ def send_message(self, message, urgent=False):
4480+ """Send to the previously given L{MessageExchange} object."""
4481+
4482+ # Check that the message to be sent is serializable over AMP
4483+ from landscape.lib.amp import MethodCallArgument
4484+ assert(MethodCallArgument.check(message))
4485+
4486+ return execute(self.exchanger.send, message, urgent=urgent)
4487+
4488+ def register_client_accepted_message_type(self, type):
4489+ return execute(self.exchanger.register_client_accepted_message_type,
4490+ type)
4491+
4492+ def get_accepted_message_types(self):
4493+ """
4494+ Return a deferred resulting in the list of message types accepted
4495+ by the Landscape server.
4496+ """
4497+ return execute(self.message_store.get_accepted_types)
4498+
4499+
4500+class BrokerClientProtocol(ComponentProtocol):
4501+ """Communication protocol between a client and the broker."""
4502+
4503+ methods = (ComponentProtocol.methods + ["fire_event", "message"])
4504+
4505+
4506+class BrokerClientProtocolFactory(ComponentProtocolFactory):
4507+
4508+ protocol = BrokerClientProtocol
4509+
4510+
4511+class RemoteClient(RemoteObject):
4512+ """A remote L{BrokerClient} connected to a L{BrokerServer}."""
4513+
4514+
4515+class RemoteBrokerConnector(RemoteComponentConnector):
4516+ """Helper to create connections with the L{BrokerServer}."""
4517+
4518+ factory = BrokerClientProtocolFactory
4519+ remote = RemoteBroker
4520+ component = BrokerServer
4521+
4522+
4523+class RemoteClientConnector(RemoteComponentConnector):
4524+ """Helper to create connections with the L{BrokerServer}."""
4525+
4526+ factory = BrokerServerProtocolFactory
4527+ remote = RemoteClient
4528+ component = BrokerClient
4529+
4530+
4531+class RemoteMonitorConnector(RemoteClientConnector):
4532+ """Helper to create connections with the L{Monitor}."""
4533+
4534+ component = Monitor
4535+
4536+
4537+class RemoteManagerConnector(RemoteClientConnector):
4538+ """Helper for creating connections with the L{Monitor}."""
4539+
4540+ component = Manager
4541+
4542+RemoteComponentsRegistry.register(RemoteBrokerConnector)
4543+RemoteComponentsRegistry.register(RemoteClientConnector)
4544+RemoteComponentsRegistry.register(RemoteMonitorConnector)
4545+RemoteComponentsRegistry.register(RemoteManagerConnector)
4546
4547=== added file 'landscape/broker/client.py'
4548--- landscape/broker/client.py 1970-01-01 00:00:00 +0000
4549+++ landscape/broker/client.py 2012-04-22 14:14:27 +0000
4550@@ -0,0 +1,200 @@
4551+from logging import info, exception
4552+
4553+from twisted.internet.defer import maybeDeferred
4554+
4555+from landscape.log import format_object
4556+from landscape.lib.twisted_util import gather_results
4557+
4558+
4559+class HandlerNotFoundError(Exception):
4560+ """A handler for the given message type was not found."""
4561+
4562+
4563+class BrokerClientPlugin(object):
4564+ """A convenience for writing L{BrokerClient} plugins.
4565+
4566+ This provides a register method which will set up a bunch of
4567+ reactor handlers in the idiomatic way.
4568+
4569+ If C{run} is defined on subclasses, it will be called every C{run_interval}
4570+ seconds after being registered.
4571+
4572+ @cvar run_interval: The interval, in seconds, to execute the C{run} method.
4573+ If set to C{None}, then C{run} will not be scheduled.
4574+ @cvar run_immediately: If C{True} the plugin will be run immediately after
4575+ it is registered.
4576+ """
4577+
4578+ run_interval = 5
4579+ run_immediately = False
4580+
4581+ def register(self, client):
4582+ self.client = client
4583+ if getattr(self, "run", None) is not None:
4584+ if self.run_immediately:
4585+ self.run()
4586+ if self.run_interval is not None:
4587+ self.client.reactor.call_every(self.run_interval, self.run)
4588+
4589+ @property
4590+ def registry(self):
4591+ """An alias for the C{client} attribute."""
4592+ return self.client
4593+
4594+ def call_on_accepted(self, type, callable, *args, **kwargs):
4595+ """
4596+ Register a callback fired upon a C{message-type-acceptance-changed}.
4597+ """
4598+
4599+ def acceptance_changed(acceptance):
4600+ if acceptance:
4601+ return callable(*args, **kwargs)
4602+
4603+ self.client.reactor.call_on(("message-type-acceptance-changed", type),
4604+ acceptance_changed)
4605+
4606+
4607+class BrokerClient(object):
4608+ """Basic plugin registry for clients that have to deal with the broker.
4609+
4610+ This knows about the needs of a client when dealing with the Landscape
4611+ broker, including interest in messages of a particular type delivered
4612+ by the broker to the client.
4613+
4614+ @cvar name: The name used when registering to the broker, it must be
4615+ defined by sub-classes.
4616+ @ivar broker: A reference to a connected L{RemoteBroker}, it must be set
4617+ by the connecting machinery at service startup.
4618+
4619+ @param reactor: A L{TwistedReactor}.
4620+ """
4621+ name = "client"
4622+
4623+ def __init__(self, reactor):
4624+ super(BrokerClient, self).__init__()
4625+ self.reactor = reactor
4626+ self.broker = None
4627+ self._registered_messages = {}
4628+ self._plugins = []
4629+ self._plugin_names = {}
4630+
4631+ # Register event handlers
4632+ self.reactor.call_on("impending-exchange", self.notify_exchange)
4633+ self.reactor.call_on("broker-reconnect", self.handle_reconnect)
4634+
4635+ def ping(self):
4636+ """Return C{True}"""
4637+ return True
4638+
4639+ def add(self, plugin):
4640+ """Add a plugin.
4641+
4642+ The plugin's C{register} method will be called with this broker client
4643+ as its argument.
4644+
4645+ If the plugin has a C{plugin_name} attribute, it will be possible to
4646+ look up the plugin later with L{get_plugin}.
4647+ """
4648+ info("Registering plugin %s.", format_object(plugin))
4649+ self._plugins.append(plugin)
4650+ if hasattr(plugin, 'plugin_name'):
4651+ self._plugin_names[plugin.plugin_name] = plugin
4652+ plugin.register(self)
4653+
4654+ def get_plugins(self):
4655+ """Get the list of plugins."""
4656+ return self._plugins[:]
4657+
4658+ def get_plugin(self, name):
4659+ """Get a particular plugin by name."""
4660+ return self._plugin_names[name]
4661+
4662+ def register_message(self, type, handler):
4663+ """
4664+ Register interest in a particular type of Landscape server->client
4665+ message.
4666+
4667+ @param type: The type of message to register C{handler} for.
4668+ @param handler: A callable taking a message as a parameter, called
4669+ when messages of C{type} are received.
4670+ @return: A C{Deferred} that will fire when registration completes.
4671+ """
4672+ self._registered_messages[type] = handler
4673+ return self.broker.register_client_accepted_message_type(type)
4674+
4675+ def dispatch_message(self, message):
4676+ """Run the handler registered for the type of the given message.
4677+
4678+ @return: The return value of the handler, if found.
4679+ @raises: HandlerNotFoundError if the handler was not found
4680+ """
4681+ type = message["type"]
4682+ handler = self._registered_messages.get(type)
4683+ if handler is None:
4684+ raise HandlerNotFoundError(type)
4685+ try:
4686+ return handler(message)
4687+ except:
4688+ exception("Error running message handler for type %r: %r"
4689+ % (type, handler))
4690+
4691+ def message(self, message):
4692+ """Call C{dispatch_message} for the given C{message}.
4693+
4694+ @return: A boolean indicating if a handler for the message was found.
4695+ """
4696+ try:
4697+ self.dispatch_message(message)
4698+ return True
4699+ except HandlerNotFoundError:
4700+ return False
4701+
4702+ def exchange(self):
4703+ """Call C{exchange} on all plugins."""
4704+ for plugin in self.get_plugins():
4705+ if hasattr(plugin, "exchange"):
4706+ try:
4707+ plugin.exchange()
4708+ except:
4709+ exception("Error during plugin exchange")
4710+
4711+ def notify_exchange(self):
4712+ """Notify all plugins about an impending exchange."""
4713+ info("Got notification of impending exchange. Notifying all plugins.")
4714+ self.exchange()
4715+
4716+ def fire_event(self, event_type, *args, **kwargs):
4717+ """Fire an event of a given type.
4718+
4719+ @return: A L{Deferred} resulting in a list of returns values of
4720+ the fired event handlers, in the order they were fired.
4721+ """
4722+ if event_type == "message-type-acceptance-changed":
4723+ message_type = args[0]
4724+ acceptance = args[1]
4725+ results = self.reactor.fire((event_type, message_type), acceptance)
4726+ else:
4727+ results = self.reactor.fire(event_type, *args, **kwargs)
4728+ return gather_results([
4729+ maybeDeferred(lambda x: x, result) for result in results])
4730+
4731+ def handle_reconnect(self):
4732+ """Called when the connection with the broker is established again.
4733+
4734+ The following needs to be done:
4735+
4736+ - Re-register any previously registered message types, so the broker
4737+ knows we have interest on them.
4738+
4739+ - Re-register ourselves as client, so the broker knows we exist and
4740+ will talk to us firing events and dispatching messages.
4741+ """
4742+ for type in self._registered_messages:
4743+ self.broker.register_client_accepted_message_type(type)
4744+ self.broker.register_client(self.name)
4745+
4746+ def exit(self):
4747+ """Stop the reactor and exit the process."""
4748+ # Stop with a short delay to give a chance to reply to the
4749+ # caller over AMP.
4750+ self.reactor.call_later(0.1, self.reactor.stop)
4751
4752=== added file 'landscape/broker/config.py'
4753--- landscape/broker/config.py 1970-01-01 00:00:00 +0000
4754+++ landscape/broker/config.py 2012-04-22 14:14:27 +0000
4755@@ -0,0 +1,98 @@
4756+"""Configuration class for the broker."""
4757+
4758+import os
4759+
4760+from landscape.deployment import Configuration
4761+
4762+
4763+class BrokerConfiguration(Configuration):
4764+ """Specialized configuration for the Landscape Broker.
4765+
4766+ @cvar required_options: C{["url"]}
4767+ """
4768+
4769+ def __init__(self):
4770+ super(BrokerConfiguration, self).__init__()
4771+ self._original_http_proxy = os.environ.get("http_proxy")
4772+ self._original_https_proxy = os.environ.get("https_proxy")
4773+
4774+ @property
4775+ def exchange_store_path(self):
4776+ return os.path.join(self.data_path, "exchange.database")
4777+
4778+ def make_parser(self):
4779+ """Parser factory for broker-specific options.
4780+
4781+ @return: An L{OptionParser} preset for all the options
4782+ from L{Configuration.make_parser} plus:
4783+ - C{account_name}
4784+ - C{registration_password}
4785+ - C{computer_title}
4786+ - C{exchange_interval} (C{15*60})
4787+ - C{urgent_exchange_interval} (C{1*60})
4788+ - C{http_proxy}
4789+ - C{https_proxy}
4790+ - C{cloud}
4791+ - C{otp}
4792+ - C{provisioning_otp}
4793+ """
4794+ parser = super(BrokerConfiguration, self).make_parser()
4795+
4796+ parser.add_option("-a", "--account-name", metavar="NAME",
4797+ help="The account this computer belongs to.")
4798+ parser.add_option("-p", "--registration-password", metavar="PASSWORD",
4799+ help="The account-wide password used for "
4800+ "registering clients.")
4801+ parser.add_option("-t", "--computer-title", metavar="TITLE",
4802+ help="The title of this computer")
4803+ parser.add_option("--exchange-interval", default=15 * 60, type="int",
4804+ metavar="INTERVAL",
4805+ help="The number of seconds between server "
4806+ "exchanges.")
4807+ parser.add_option("--urgent-exchange-interval", default=1 * 60,
4808+ type="int", metavar="INTERVAL",
4809+ help="The number of seconds between urgent server "
4810+ "exchanges.")
4811+ parser.add_option("--ping-interval", default=30, type="int",
4812+ metavar="INTERVAL",
4813+ help="The number of seconds between pings.")
4814+ parser.add_option("--http-proxy", metavar="URL",
4815+ help="The URL of the HTTP proxy, if one is needed.")
4816+ parser.add_option("--https-proxy", metavar="URL",
4817+ help="The URL of the HTTPS proxy, if one is needed.")
4818+ parser.add_option("--cloud", action="store_true",
4819+ help="Set this if your computer is in an EC2 cloud.")
4820+ parser.add_option("--otp", default="",
4821+ help="The OTP to use in cloud configuration.")
4822+ parser.add_option("--tags",
4823+ help="Comma separated list of tag names to be sent "
4824+ "to the server.")
4825+ parser.add_option("--provisioning-otp", default="",
4826+ help="The OTP to use for a provisioned machine.")
4827+
4828+ return parser
4829+
4830+ @property
4831+ def message_store_path(self):
4832+ """Get the path to the message store."""
4833+ return os.path.join(self.data_path, "messages")
4834+
4835+ def load(self, args, accept_nonexistent_config=False):
4836+ """
4837+ Load options from command line arguments and a config file.
4838+
4839+ Load the configuration with L{Configuration.load}, and then set
4840+ C{http_proxy} and C{https_proxy} environment variables based on
4841+ that config data.
4842+ """
4843+ super(BrokerConfiguration, self).load(
4844+ args, accept_nonexistent_config=accept_nonexistent_config)
4845+ if self.http_proxy:
4846+ os.environ["http_proxy"] = self.http_proxy
4847+ elif self._original_http_proxy:
4848+ os.environ["http_proxy"] = self._original_http_proxy
4849+
4850+ if self.https_proxy:
4851+ os.environ["https_proxy"] = self.https_proxy
4852+ elif self._original_https_proxy:
4853+ os.environ["https_proxy"] = self._original_https_proxy
4854
4855=== added file 'landscape/broker/exchange.py'
4856--- landscape/broker/exchange.py 1970-01-01 00:00:00 +0000
4857+++ landscape/broker/exchange.py 2012-04-22 14:14:27 +0000
4858@@ -0,0 +1,436 @@
4859+"""The part of the broker which deals with communications with the server."""
4860+import time
4861+import logging
4862+from landscape.lib.hashlib import md5
4863+
4864+from twisted.internet.defer import succeed
4865+
4866+from landscape.lib.message import got_next_expected, ANCIENT
4867+from landscape.log import format_delta
4868+from landscape import SERVER_API, CLIENT_API
4869+
4870+
4871+class MessageExchange(object):
4872+ """
4873+ The Message Exchange is the place where messages are sent to go
4874+ out to the Landscape server.
4875+
4876+ The Message Exchange will accumulate messages in its message store
4877+ and periodically deliver them to the server.
4878+ """
4879+
4880+ plugin_name = "message-exchange"
4881+
4882+ def __init__(self, reactor, store, transport, registration_info,
4883+ exchange_store,
4884+ config,
4885+ monitor_interval=None,
4886+ max_messages=100,
4887+ create_time=time.time):
4888+ """
4889+ @param reactor: A L{TwistedReactor} used to fire events in response
4890+ to messages received by the server.
4891+ @param store: A L{MessageStore} used to queue outgoing messages.
4892+ @param transport: A L{HTTPTransport} used to deliver messages.
4893+ @param exchange_interval: time interval between subsequent
4894+ exchanges of non-urgent messages.
4895+ @param urgent_exchange_interval: time interval between subsequent
4896+ exchanges of urgent messages.
4897+ """
4898+ self._reactor = reactor
4899+ self._message_store = store
4900+ self._create_time = create_time
4901+ self._transport = transport
4902+ self._registration_info = registration_info
4903+ self._config = config
4904+ self._exchange_interval = config.exchange_interval
4905+ self._urgent_exchange_interval = config.urgent_exchange_interval
4906+ self._max_messages = max_messages
4907+ self._notification_id = None
4908+ self._exchange_id = None
4909+ self._exchanging = False
4910+ self._urgent_exchange = False
4911+ self._client_accepted_types = set()
4912+ self._client_accepted_types_hash = None
4913+ self._message_handlers = {}
4914+ self._exchange_store = exchange_store
4915+
4916+ self.register_message("accepted-types", self._handle_accepted_types)
4917+ self.register_message("resynchronize", self._handle_resynchronize)
4918+ self.register_message("set-intervals", self._handle_set_intervals)
4919+ reactor.call_on("resynchronize-clients", self._resynchronize)
4920+ reactor.call_on("pre-exit", self.stop)
4921+
4922+ def get_exchange_intervals(self):
4923+ """Return a binary tuple with urgent and normal exchange intervals."""
4924+ return (self._urgent_exchange_interval, self._exchange_interval)
4925+
4926+ def _message_is_obsolete(self, message):
4927+ """Returns C{True} if message is obsolete.
4928+
4929+ A message is considered obsolete if the secure ID changed since it was
4930+ received.
4931+ """
4932+ if 'operation-id' not in message:
4933+ return False
4934+
4935+ operation_id = message['operation-id']
4936+ context = self._exchange_store.get_message_context(operation_id)
4937+ if context is None:
4938+ logging.warning(
4939+ "No message context for message with operation-id: %s"
4940+ % operation_id)
4941+ return False
4942+
4943+ # Compare the current secure ID with the one that was in effect when
4944+ # the request message was received.
4945+ result = self._registration_info.secure_id != context.secure_id
4946+ context.remove()
4947+
4948+ return result
4949+
4950+ def send(self, message, urgent=False):
4951+ """Include a message to be sent in an exchange.
4952+
4953+ If urgent is True, an exchange with the server will be
4954+ scheduled urgently.
4955+
4956+ @param message: Same as in L{MessageStore.add}.
4957+ """
4958+ if self._message_is_obsolete(message):
4959+ logging.info(
4960+ "Response message with operation-id %s was discarded "
4961+ "because the client's secure ID has changed in the meantime"
4962+ % message.get('operation-id'))
4963+ return None
4964+
4965+ if "timestamp" not in message:
4966+ message["timestamp"] = int(self._reactor.time())
4967+ message_id = self._message_store.add(message)
4968+ if urgent:
4969+ self.schedule_exchange(urgent=True)
4970+ return message_id
4971+
4972+ def start(self):
4973+ """Start scheduling exchanges. The first one will be urgent."""
4974+ self.schedule_exchange(urgent=True)
4975+
4976+ def stop(self):
4977+ if self._exchange_id is not None:
4978+ self._reactor.cancel_call(self._exchange_id)
4979+ self._exchange_id = None
4980+ if self._notification_id is not None:
4981+ self._reactor.cancel_call(self._notification_id)
4982+ self._notification_id = None
4983+
4984+ def _handle_accepted_types(self, message):
4985+ """
4986+ When the server updates us about the types of message it
4987+ accepts, update our message store.
4988+
4989+ If this makes existing held messages available for sending,
4990+ urgently exchange messages.
4991+
4992+ If new types are made available or old types are dropped a
4993+ C{("message-type-acceptance-changed", type, bool)} reactor
4994+ event will be fired.
4995+ """
4996+ old_types = set(self._message_store.get_accepted_types())
4997+ new_types = set(message["types"])
4998+ diff = get_accepted_types_diff(old_types, new_types)
4999+ self._message_store.set_accepted_types(new_types)
5000+ logging.info("Accepted types changed: %s", diff)
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: