[V1 0/2] *** SUBJECT HERE ***
by huoyuxin@linux.vnet.ibm.com
From: Yu Xin Huo <huoyuxin(a)linux.vnet.ibm.com>
Edit guest network interface UI and translations
Yu Xin Huo (2):
Edit Guest Network Inteface UI
Edit Guest Network Interface PO
po/en_US.po | 3 +
po/kimchi.pot | 3 +
po/pt_BR.po | 3 +
po/zh_CN.po | 3 +
ui/css/theme-default/guest-edit.css | 43 +++++++++++++++
ui/js/src/kimchi.api.js | 55 +++++++++++++++++++
ui/js/src/kimchi.guest_edit_main.js | 103 +++++++++++++++++++++++++++++++++++
ui/pages/guest-edit.html.tmpl | 53 ++++++++++++++++++
8 files changed, 266 insertions(+), 0 deletions(-)
10 years, 8 months
[PATCH 1/2] config version API support: add a method to get kimchi version
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
add a method to get kimchi version in config.py
If kimchi run after package install, just get the version.
Or get the build nubmer.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
src/kimchi/Makefile.am | 4 +++-
src/kimchi/config.py.in | 47 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am
index 957d2c9..e2b5bea 100644
--- a/src/kimchi/Makefile.am
+++ b/src/kimchi/Makefile.am
@@ -41,7 +41,9 @@ do_substitution = \
-e 's,[@]sysconfdir[@],$(sysconfdir),g' \
-e 's,[@]localstatedir[@],$(localstatedir),g' \
-e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \
- -e 's,[@]kimchidir[@],$(kimchidir),g'
+ -e 's,[@]kimchidir[@],$(kimchidir),g' \
+ -e 's,[@]kimchiversion[@],$(PACKAGE_VERSION),g' \
+ -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g'
config.py: config.py.in Makefile
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in
index 04218c2..a260885 100644
--- a/src/kimchi/config.py.in
+++ b/src/kimchi/config.py.in
@@ -21,6 +21,7 @@
import libvirt
import os
import platform
+import subprocess
import threading
@@ -29,6 +30,8 @@ from ConfigParser import SafeConfigParser
from kimchi.xmlutils import xpath_get_text
+__version__ = "@kimchiversion@"
+__release__ = "@kimchirelease@"
DEFAULT_LOG_LEVEL = "debug"
@@ -54,6 +57,50 @@ def get_debugreports_path():
return os.path.join(paths.state_dir, 'debugreports')
+def check_in_source_directory():
+ if __file__.startswith("/"):
+ base = os.path.dirname(__file__)
+ else:
+ base = os.path.dirname('./%s' % __file__)
+
+ if os.access('%s/../../src/kimchi/config.py' % base, os.F_OK):
+ return True
+
+ return False
+
+
+def check_in_packaged_directory():
+ # FIXME
+ # 1. We can not guarantee only one kimchid is running at the same time.
+ # Maybe a kimchid by make install is running, another kimchid by package
+ # isntall is also running with different http/https port and directory.
+ # 2. Even kimchid is installed by package, we can still stop it, and run
+ # kimchid in make install directory
+ try:
+ cmd = ["rpm", "-qa", "kimchi"]
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, error = proc.communicate()
+ if out != "" and proc.returncode == 0:
+ return True
+ except OSError:
+ cmd = ["dpkg", "--get-selections", "kimchi"]
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, error = proc.communicate()
+ if "install" in out and proc.returncode == 0:
+ return True
+
+ return False
+
+
+def get_version():
+ if check_in_source_directory() or not check_in_packaged_directory():
+ return "-".join([__version__, __release__])
+
+ return __version__
+
+
def find_qemu_binary(find_emulator=False):
try:
connect = libvirt.open('qemu:///system')
--
1.8.5.3
10 years, 8 months
[PATCH V2 0/3] VM Edit CPU/Memory
by Rodrigo Trujillo
V2:
Rebased with latest Kimchi master
V1:
This patch set implements backend side of feature "Edit VM CPU/Memory".
You can use curl to test:
curl -X PUT -u <USER> -H 'Content-type: application/json'
-H 'Accept: application/json' http://localhost:8000/vms/<VM_NAME>
-d '{ "cpus": <NUM>, "memory": <NUM>}'
Rodrigo Trujillo (3):
VM Edit CPU/Memory: (Backend) Changes API.md, API.json and i18n.py
VM Edit CPU/Memory: (Backend) Changes VM control and model
VM Edit CPU/Memory: (Backend) Changes mockmodel and tests
docs/API.md | 3 +++
src/kimchi/API.json | 12 ++++++++++++
src/kimchi/control/vms.py | 4 ++--
src/kimchi/i18n.py | 3 ++-
src/kimchi/mockmodel.py | 30 +++++++++++++++++-------------
src/kimchi/model/vms.py | 43 +++++++++++++++++++++++++++----------------
tests/test_mockmodel.py | 5 +++--
tests/test_model.py | 25 ++++++++++++++++++++-----
tests/test_rest.py | 32 +++++++++++++++++++++++++++++---
9 files changed, 115 insertions(+), 42 deletions(-)
--
1.8.5.3
10 years, 8 months
[PATCH] Fix kimchi vlan tagged bridge name
by Mark Wu
Before we use 'kimchi-{iface_name}-{vlan_id}' as the new created
bridge name. It will exceed the maximum length of bridge name when
the interface name is too long. For example, when the udev
rule of renaming interface name by pci slot is enabled, the interface
name could look like 'enP3p9s0f2', which indicates the pci address of
nic device. According to systemd udev code, the prefix 'en' stands for
'ethernet'. We don't need preserve it in the bridge name. So this patch
change the bridge name convention to 'kb-{iface_name}[-8:]-
{vlan_id}'. It can keep the interface information with length less than
16 chars.
Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
---
src/kimchi/model/networks.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
index 8f77c12..3786969 100644
--- a/src/kimchi/model/networks.py
+++ b/src/kimchi/model/networks.py
@@ -32,6 +32,9 @@ from kimchi.rollbackcontext import RollbackContext
from kimchi.utils import kimchi_log
+KIMCHI_BRIDGE_PREFIX = 'kb'
+
+
class NetworksModel(object):
def __init__(self, **kargs):
self.conn = kargs['conn']
@@ -180,7 +183,9 @@ class NetworksModel(object):
return interfaces
def _create_vlan_tagged_bridge(self, interface, vlan_id):
- br_name = '-'.join(('kimchi', interface, vlan_id))
+ # Truncate the interface name if it exceeds 8 characters to make sure
+ # the length of bridge name is less than 15 (its maximum value).
+ br_name = KIMCHI_BRIDGE_PREFIX + interface[-8:] + '-' + vlan_id
br_xml = networkxml.create_vlan_tagged_bridge_xml(br_name, interface,
vlan_id)
conn = self.conn.get()
@@ -341,7 +346,7 @@ class NetworkModel(object):
except libvirt.libvirtError:
pass
else:
- if bridge.startswith('kimchi-'):
+ if bridge.startswith(KIMCHI_BRIDGE_PREFIX):
conn = self.conn.get()
iface = conn.interfaceLookupByName(bridge)
iface.destroy(0)
--
1.8.4.2
10 years, 8 months
[PATCH] error when editing repository entry with no mirrorlist.
by Paulo Vital
After edit a repository entry that contains only the baseurl field,
the new content of the entry will not be stored due to an error when
using '' string to the mirrorlist field.
File "/home/pvital/git/kimchi-test-upstream/src/kimchi/repositories.py", line 267, in updateRepo
entry.mirrorlist = mirrorlist
File "/usr/lib/python2.7/site-packages/yum/config.py", line 102, in __set__
value, str(e)))
ValueError: Error parsing "mirrorlist = u''": URL must be http, ftp, file or https not ""
This patch fixes the issue with a verification of the mirrorlist
before process it.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
src/kimchi/repositories.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/kimchi/repositories.py b/src/kimchi/repositories.py
index ba432ef..414f146 100644
--- a/src/kimchi/repositories.py
+++ b/src/kimchi/repositories.py
@@ -262,6 +262,9 @@ class YumRepo(object):
if baseurl is not None:
entry.baseurl = baseurl
+ if mirrorlist == '':
+ mirrorlist = None
+
if mirrorlist is not None:
entry.mirrorlist = mirrorlist
--
1.8.3.1
10 years, 8 months
[PATCH] kimchi.disks: Ignore unsupported partition table
by zhshzhou@linux.vnet.ibm.com
From: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
Some types of partition table such as AIX partition table are used by
proprietary systems. The open-source disk tools such as fdisk and parted
can not handle these partition tables. There is no obvious way to get
extended partition until those proprietary partition tables are
supported by Linux officially.
In this patch we treate unsupported partiton table as if it does not
contain extended partition.
bug-url: https://bugzilla.redhat.com/show_bug.cgi?id=566722
Signed-off-by: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
---
src/kimchi/disks.py | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/disks.py b/src/kimchi/disks.py
index 5f004b3..842fd48 100644
--- a/src/kimchi/disks.py
+++ b/src/kimchi/disks.py
@@ -97,7 +97,15 @@ def _is_dev_extended_partition(devType, devNodePath):
return False
diskPath = devNodePath.rstrip('0123456789')
device = PDevice(diskPath)
- extended_part = PDisk(device).getExtendedPartition()
+ try:
+ extended_part = PDisk(device).getExtendedPartition()
+ except NotImplementedError as e:
+ kimchi_log.warning(
+ "Error getting extended partition info for dev %s type %s: %s",
+ devNodePath, devType, e.message)
+ # Treate disk with unsupported partiton table as if it does not
+ # contain extended partitions.
+ return False
if extended_part and extended_part.path == devNodePath:
return True
return False
--
1.9.0
10 years, 8 months
[PATCH] Fix get_storageservers API and UI retrieval of storage servers.
by Christy Perez
This issue was discovered when it was realized that the list of NFS
servers currently on the system was not being displayed in a drop-down
for the server IP/name while adding a new NFS server.
The UI was calling the getstorageservers API and passing a filter of netfs, but
the StorageServers class was referencing a non-existent object. This threw an
exception that was not passed up as an error, and an empty list was returned
every time.
Additionally, a change to the STORAGE_SOURCES dictionary was causing errors
when the StorageServersModel::lookup() tried to access a non-existent key in
in the new scsi value. This is seen if a scsi pool exists on a system.
To allow the API to work, and sucessfully retrieve only *server* objects, this
patch makes the following changes:
1. Add a STORAGE_SERVERS list to storageservers.py containing only valid
server types.
The API doc states that currently only netfs is supported.
2. Since storagetargets correlates to an individual server (see the
API doc for storagetargets) use the new STORAGE_SERVERS list instead
of the sources ones.
3. Move the STORAGE_SOURCES dictionary into storagepools.py, since it should
cover all pool types. In the future, it should be expanded to include
iscsi, netfs, dir, scsi fc_host, etc.
4. Updates mockmodel to incorporate the new STORAGE_SERVERS list.
To test, create different types of pools, one nfs, and use:
$ curl -k -u user:pass -H 'Content-type: applicatiojson' -H 'Accept: application/json' https://localhost:8001/storageservers?_target_type=netfs
and
$ curl -k -u user:pass -H 'Content-type: applicatiojson' -H 'Accept: application/json' https://localhost:8001/storageservers
Or create at least one NFS pool, then when creating a second NFS pool, the
names/IPs of the others will appear in the UI's server field called
"NFS Server IP"
Signed-off-by: Christy Perez <christy(a)linux.vnet.ibm.com>
---
src/kimchi/mockmodel.py | 5 +++--
src/kimchi/model/storagepools.py | 3 ++-
src/kimchi/model/storageservers.py | 16 +++++++++-------
src/kimchi/model/storagetargets.py | 4 ++--
4 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
index dbdd57e..fe02abe 100644
--- a/src/kimchi/mockmodel.py
+++ b/src/kimchi/mockmodel.py
@@ -46,7 +46,8 @@ from kimchi.config import config as kconfig
from kimchi.distroloader import DistroLoader
from kimchi.exception import InvalidOperation, InvalidParameter
from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
-from kimchi.model.storagepools import ISO_POOL_NAME, STORAGE_SOURCES
+from kimchi.model.storagepools import ISO_POOL_NAME
+from kimchi.model.storageservers import STORAGE_SERVERS
from kimchi.model.utils import get_vm_name
from kimchi.model.vms import VM_STATIC_UPDATE_PARAMS
from kimchi.objectstore import ObjectStore
@@ -503,7 +504,7 @@ class MockModel(object):
def storageservers_get_list(self, _target_type=None):
# FIXME: This needs to be updted when adding new storage server support
- target_type = STORAGE_SOURCES.keys() \
+ target_type = STORAGE_SERVERS \
if not _target_type else [_target_type]
pools = self.storagepools_get_list()
server_list = []
diff --git a/src/kimchi/model/storagepools.py b/src/kimchi/model/storagepools.py
index 5af33b7..0f673bb 100644
--- a/src/kimchi/model/storagepools.py
+++ b/src/kimchi/model/storagepools.py
@@ -36,6 +36,8 @@ POOL_STATE_MAP = {0: 'inactive',
3: 'degraded',
4: 'inaccessible'}
+# Types of pools supported
+# FIXME: Add 'dir', 'logical' 'iscsi', 'fc_host' ?
STORAGE_SOURCES = {'netfs': {'addr': '/pool/source/host/@name',
'path': '/pool/source/dir/@path'},
'scsi': {'adapter_type': '/pool/source/adapter/@type',
@@ -207,7 +209,6 @@ class StoragePoolModel(object):
source[key] = ""
else:
source[key] = res
-
return source
def _nfs_status_online(self, pool, poolArgs=None):
diff --git a/src/kimchi/model/storageservers.py b/src/kimchi/model/storageservers.py
index 167fedd..c9dfb25 100644
--- a/src/kimchi/model/storageservers.py
+++ b/src/kimchi/model/storageservers.py
@@ -18,24 +18,26 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from kimchi.exception import NotFoundError
-from kimchi.model.storagepools import StoragePoolModel, STORAGE_SOURCES
+from kimchi.model.storagepools import StoragePoolModel, StoragePoolsModel
+
+# Types of remote storage servers supported
+# FIXME: Add iscsi?
+STORAGE_SERVERS = ['netfs']
class StorageServersModel(object):
def __init__(self, **kargs):
self.conn = kargs['conn']
self.pool = StoragePoolModel(**kargs)
+ self.pools = StoragePoolsModel(**kargs)
def get_list(self, _target_type=None):
if not _target_type:
- target_type = STORAGE_SOURCES.keys()
+ target_type = STORAGE_SERVERS
else:
target_type = [_target_type]
- pools = self.pools.get_list()
- conn = self.conn.get()
- pools = conn.listStoragePools()
- pools += conn.listDefinedStoragePools()
+ pools = self.pools.get_list()
server_list = []
for pool in pools:
@@ -64,7 +66,7 @@ class StorageServerModel(object):
for pool in pools:
try:
pool_info = self.pool.lookup(pool)
- if (pool_info['source'] and
+ if (pool_info['type'] in STORAGE_SERVERS and
pool_info['source']['addr'] == server):
return dict(host=server)
except NotFoundError:
diff --git a/src/kimchi/model/storagetargets.py b/src/kimchi/model/storagetargets.py
index e090d84..caa8dbe 100644
--- a/src/kimchi/model/storagetargets.py
+++ b/src/kimchi/model/storagetargets.py
@@ -23,7 +23,7 @@ from lxml import objectify
from lxml.builder import E
from kimchi.model.config import CapabilitiesModel
-from kimchi.model.storagepools import STORAGE_SOURCES
+from kimchi.model.storageservers import STORAGE_SERVERS
from kimchi.utils import kimchi_log, patch_find_nfs_target
@@ -36,7 +36,7 @@ class StorageTargetsModel(object):
target_list = list()
if not _target_type:
- target_types = STORAGE_SOURCES.keys()
+ target_types = STORAGE_SERVERS
else:
target_types = [_target_type]
--
1.9.0
10 years, 8 months
[PATCH 1/2] remove obsolete i18n strings which are no longer in use
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
These strings are no longer in use, but they still remain in i18n.py
Signed-off-by: Zhou Zheng Sheng <zhshzhou(a)linux.vnet.ibm.com>
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
plugins/sample/i18n.py | 1 -
src/kimchi/i18n.py | 4 ----
2 files changed, 5 deletions(-)
diff --git a/plugins/sample/i18n.py b/plugins/sample/i18n.py
index 8957e11..72d9783 100644
--- a/plugins/sample/i18n.py
+++ b/plugins/sample/i18n.py
@@ -26,7 +26,6 @@ messages = {
"SPAPI0001E": _("Unkown parameter specified %(value)s"),
"SPAPI0002E": _("The specified value %(value)s is not a positive number"),
- "SPCIRC0001E": _("Circle %(name)s already exists"),
"SPCIRC0002E": _("Circle %(name)s does not exist"),
"SPCIRC0003E": _("Specify name and radius to create a Circle"),
"SPCIRC0004E": _("Circle name must be a string"),
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index d45f607..0eb721a 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -36,7 +36,6 @@ messages = {
"KCHAUTH0001E": _("Authentication failed for user '%(userid)s'. [Error code: %(code)s]"),
"KCHAUTH0002E": _("You are not authorized to access Kimchi"),
"KCHAUTH0003E": _("Specify %(item)s to login into Kimchi"),
- "KCHAUTH0004E": _("This operation is not allowed as you have restricted access to Kimchi."),
"KCHDISKS0001E": _("Error while getting block devices. Details: %(err)s"),
"KCHDISKS0002E": _("Error while getting block device information for %(device)s."),
@@ -110,7 +109,6 @@ messages = {
"KCHPOOL0001E": _("Storage pool %(name)s already exists"),
"KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
- "KCHPOOL0003E": _("Autostart flag must be true or false"),
"KCHPOOL0004E": _("Specify %(item)s in order to create the storage pool %(name)s"),
"KCHPOOL0005E": _("Unable to delete active storage pool %(name)s"),
"KCHPOOL0006E": _("Unable to list storage pools. Details: %(err)s"),
@@ -173,7 +171,6 @@ messages = {
"KCHNET0007E": _("Interface should be bare NIC, bonding or bridge device."),
"KCHNET0008E": _("Unable to create network %(name)s. Details: %(err)s"),
"KCHNET0009E": _("Unable to find a free IP address for network '%(name)s'"),
- "KCHNET0010E": _("Unable to create VLAN tagged bridge using interface %(iface)s. Details: %(err)s"),
"KCHNET0011E": _("Network name must be a string"),
"KCHNET0012E": _("Supported network types are isolated, NAT and bridge"),
"KCHNET0013E": _("Network subnet must be a string with IP address and prefix or netmask"),
@@ -217,7 +214,6 @@ messages = {
"KCHCDROM0002E": _("Invalid storage type. Types supported: 'cdrom'"),
"KCHCDROM0003E": _("The path '%(value)s' is not valid local/remote path for the device"),
"KCHCDROM0004E": _("Device name %(dev_name)s already exists in vm %(vm_name)s"),
- "KCHCDROM0006E": _("Can't specify a directory for a CDROM device path"),
"KCHCDROM0007E": _("The storage device %(dev_name)s does not exist in the guest %(vm_name)s"),
"KCHCDROM0008E": _("Error while creating new storage device: %(error)s"),
"KCHCDROM0009E": _("Error while updating storage device: %(error)s"),
--
1.8.5.3
10 years, 8 months
[PATCH V5] add a make check-local command to verify the i18n string formatting
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
V4 -> V5:
improve the regular expression pattern.
remove glob
V3 -> V4:
use python script to check the i18n string formatting
For discuss with ZhengSheng, we should extend the check.
We should check the string are obsolete or they are statement but not define in i18n.py
V2 -> V3:
improve the regular expression pattern.
V1 -> V2:
move the check to top makefile.
check all i18n.py
improve the checking information.
ShaoHe Feng (1):
add a make check-local command to verify the i18n string formatting
Makefile.am | 5 +++++
contrib/check_i18n.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
create mode 100755 contrib/check_i18n.py
--
1.8.5.3
10 years, 8 months
[PATCH 1/3] add a packaged file to tell in which path kimchi run
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
It means the kimchi run in package install path when the packaged file exists.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
Makefile.am | 2 ++
contrib/kimchi.spec.fedora.in | 1 +
contrib/kimchi.spec.suse.in | 1 +
3 files changed, 4 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index 6831b5d..290e3dd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -102,11 +102,13 @@ all-local:
install-deb: install
cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
$(MKDIR_P) $(DESTDIR)/etc/init
+ $(MKDIR_P) $(DESTDIR)/lib/kimchi
$(MKDIR_P) $(DESTDIR)/usr/lib/firewalld/services
cp -R $(top_srcdir)/contrib/kimchid-upstart.conf.debian \
$(DESTDIR)/etc/init/kimchid.conf
cp -R $(top_srcdir)/src/firewalld.xml \
$(DESTDIR)/usr/lib/firewalld/services/kimchid.xml
+ touch $(DESTDIR)/lib/kimchi/packaged
deb: contrib/make-deb.sh
diff --git a/contrib/kimchi.spec.fedora.in b/contrib/kimchi.spec.fedora.in
index 1cd99b0..2e66b00 100644
--- a/contrib/kimchi.spec.fedora.in
+++ b/contrib/kimchi.spec.fedora.in
@@ -83,6 +83,7 @@ install -Dm 0755 contrib/kimchid.sysvinit %{buildroot}%{_initrddir}/kimchid
%endif
%post
+touch %{_localstatedir}/lib/kimchi/packaged
if [ $1 -eq 1 ] ; then
/bin/systemctl enable kimchid.service >/dev/null 2>&1 || :
# Initial installation
diff --git a/contrib/kimchi.spec.suse.in b/contrib/kimchi.spec.suse.in
index efb2c08..ee69384 100644
--- a/contrib/kimchi.spec.suse.in
+++ b/contrib/kimchi.spec.suse.in
@@ -51,6 +51,7 @@ install -Dm 0755 contrib/kimchid.sysvinit %{buildroot}%{_initrddir}/kimchid
%post
+touch %{_localstatedir}/lib/kimchi/packaged
chkconfig kimchid on
%preun
--
1.8.5.3
10 years, 8 months