Packaging dtds

Toshio Kuratomi a.badger at gmail.com
Fri Dec 12 01:39:08 UTC 2008


I wrote some a catalog handling %post(un) in the Red Hat Linux 9/Fedora
Core 1 time frame.  Not sure if it's still up to date, though.

> I would like to package a dtd for a package of mine: pam_mount. It has an xml 
> config file that has this dtd line:
> 
> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
> 
The DOCTYPE that I was dealing with was:

  <!DOCTYPE checklist
    PUBLIC "-//BadgerWare//DTD QA Assistant Checklist File 0.3//EN"
    "http://qa-assistant.sf.net/dtds/checklist/0.3/checklist.dtd">

I think some of the differences we see below are due to PUBLIC instead
of SYSTEM.  Some other differences are due to upstream's use of a
subcatalog.

> Where do I now have to install the dtd? Is it 
> /usr/share/xml/dtds/pam_mount/pam_mount.conf.xml.dtd? I guess I will also have 
> to create some XML catalog file, probably with xmlcatalog to make xmllint find 
> the dtd automatically. This seems to work:
> 
> # for /etc/catalog and xmlcatalog
> Requires:         xml-common
> Requires(post):   xml-common libxml2
> Requires(postun): xml-common libxml2
> 
This looks correct.

> %post
> /usr/bin/xmlcatalog --noout --add "rewriteSystem" pam_mount.conf.xml.dtd 
> file:///usr/share/xml/pam_mount/dtds/pam_mount.conf.xml.dtd /etc/xml/catalog 
> &> /dev/null || :
> 

I did:

  ROOTCATALOG=%{_sysconfdir}/xml/catalog
  /usr/bin/xmlcatalog --noout --add "delegatePublic" \
      "-//BadgerWare//DTD QA Assistant" \
      "file://$CATALOG" $ROOTCATALOG &> /dev/null || :
  /usr/bin/xmlcatalog --noout --add "delegateSystem" \
      "http://qa-assistant.sf.net/dtds" \
      "file://$CATALOG" $ROOTCATALOG &> /dev/null || :
  /usr/bin/xmlcatalog --noout --add "delegateURI" \
      "http://qa-assistant.sf.net/dtds" \
      "file://$CATALOG" $ROOTCATALOG &> /dev/null || :

[Corrected from next post]
> %postun
> if [ $1 = 0 ]; then
> /usr/bin/xmlcatalog --noout --del
> file://%{_datadir}/xml/pam_mount/dtds/pam_mount.conf.xml.dtd
> %{_sysconfdir}/catalog
> fi
> 
  ROOTCATALOG=%{_sysconfdir}/xml/catalog
  CATALOG=%{_datadir}/xml/qa-assistant/xmlcatalog

  /usr/bin/xmlcatalog --noout --del \
      "-//BadgerWare//DTD QA Assistant" &> /dev/null || :
  /usr/bin/xmlcatalog --noout --del \
      "http://qa-assistant.sf.net/dtds"

The $CATALOG file referenced in the above snippets was created by the
upstream Makefile.  It added rewriteSystem as you do and also rewriteURI
and public:

 $(XMLCATALOG) --noout --add "public" \
  "-//BadgerWare//DTD QA Assistant Checklist File 0.3//EN" \
  "checklist/0.3/checklist.dtd" $(DESTDIR)$(CATALOG);
 $(XMLCATALOG) --noout --add "rewriteSystem" \
  "http://qa-assistant.sf.net/dtds/checklist/0.3" \
  "checklist/0.3/" $(DESTDIR)$(CATALOG);
 $(XMLCATALOG) --noout --add "rewriteURI" \
  "http://qa-assistant.sf.net/dtds/checklist/0.3" \
  "checklist/0.3/" $(DESTDIR)$(CATALOG);

The dtd ended up in %{_datadir}/xml/qa-assistant/checklist/0.3/checklist.dtd

The catalog referencing it was in %{_datadir}/xml/qa-assistant/xmlcatalog

> If this is good, I will suggest to include this in the Guidelines or add it 
> somewhere else in the wiki. Or is there already some guidance that I did not 
> find?
> 
This should go on Packaging/ScriptletSnippets when done.

-Toshio

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/fedora-devel-list/attachments/20081211/4c2f5836/attachment.sig>


More information about the fedora-devel-list mailing list