Description of problem: Having a minimal install of RHEL I had to add the which package in order to run the 389-console. After that, the only thing missing was a font of any kind. While for fonts there should be a friendlier message, "which" should be a dependency of the RPM. How reproducible: Everytime Actual output of the problems below: [root@ds4 ~]# 389-console /usr/bin/389-console: line 22: which: command not found /usr/bin/389-console: The java program is not in your path, or is not executable. [root@ds4 ~]# yum install which Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * epel: ftp.ines.lug.ro Setting up Install Process Parsing package install arguments Resolving Dependencies --> Running transaction check ---> Package which.x86_64 0:2.16-7 set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================== Package Arch Version Repository Size ============================================================================================================== Installing: which x86_64 2.16-7 base 24 k Transaction Summary ============================================================================================================== Install 1 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 24 k Is this ok [y/N]: y Downloading Packages: which-2.16-7.x86_64.rpm | 24 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : which [1/1] Installed: which.x86_64 0:2.16-7 Complete! [root@ds4 ~]# 389-console Exception in thread "main" java.lang.Error: Probable fatal error:No fonts found. at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1088) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) at sun.font.FontManager.findDeferredFont(FontManager.java:916) at sun.font.FontManager.findFont2D(FontManager.java:1904) at sun.font.FontManager.findFont2D(FontManager.java:1865) at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1071) at sun.font.FontManager.initialiseDeferredFont(FontManager.java:967) at sun.font.CompositeFont.doDeferredInitialisation(CompositeFont.java:254) at sun.font.CompositeFont.getSlotFont(CompositeFont.java:334) at sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.java:77) at sun.font.CompositeStrike.getFontMetrics(CompositeStrike.java:93) at sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:358) at sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:349) at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:301) at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1010) at javax.swing.JComponent.getFontMetrics(JComponent.java:1608) at javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:244) at javax.swing.JComponent.getPreferredSize(JComponent.java:1643) at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1357) at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1305) at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(BasicListUI.java:2614) at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184) at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164) at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211) at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405) at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415) at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:459) at javax.swing.JList.setSelectedIndex(JList.java:2196) at javax.swing.plaf.basic.BasicComboPopup.setListSelection(BasicComboPopup.java:1144) at javax.swing.plaf.basic.BasicComboPopup.access$300(BasicComboPopup.java:63) at javax.swing.plaf.basic.BasicComboPopup$Handler.itemStateChanged(BasicComboPopup.java:982) at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1224) at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1281) at javax.swing.JComboBox.contentsChanged(JComboBox.java:1328) at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:117) at javax.swing.plaf.metal.MetalFileChooserUI$FilterComboBoxModel.propertyChange(MetalFileChooserUI.java:1099) at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:298) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:291) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:229) at java.awt.Component.firePropertyChange(Component.java:8001) at javax.swing.JFileChooser.setFileFilter(JFileChooser.java:1432) at javax.swing.JFileChooser.addChoosableFileFilter(JFileChooser.java:1127) at javax.swing.JFileChooser.updateUI(JFileChooser.java:1785) at javax.swing.JFileChooser.setup(JFileChooser.java:374) at javax.swing.JFileChooser.<init>(JFileChooser.java:347) at javax.swing.JFileChooser.<init>(JFileChooser.java:300) at com.netscape.management.client.console.Console.common_init(Unknown Source) at com.netscape.management.client.console.Console.<init>(Unknown Source) at com.netscape.management.client.console.Console.main(Unknown Source)
Should be relatively straightforward to add a Requires: which - not sure what the problem is with java and the fonts.
The problem for Java is quite simple. The console requires some fonts of some kind to be provided to Java in order for it to start up visually. Unfortunately, you can easily install an unusable console due to the lack of any fonts (from the RPM dependencies) on the system. The question is: should we have a generic "provides: fonts" in each font RPM such that yum installs some random pack? Is that really a bug?
Is there a way to Require fonts in general or Require specific fonts? That would be easy to add to the spec.
I'm not really sure if specific fonts would be the right thing. That's the issue that I'm fighting with. Probably the best thing to do would be to just skip this. part. Who knows what fonts Gnome or KDE will default to in the future and we don't want to force the user to use a certain font. Furthermore, if someone wants to use a localized version of the product, something like bitstream vera sans might not apply anymore or might not be optimal in CJK languages or in scripted languages like Arabic or Farsi. The other option would be to include a single fallback font in the JDK implementation. Technically, it should be a requirement for the Swing/AWT/SWT/Java2D/etc. packages.
Added the "which" package to the Requires Checking in F-10/389-console.spec; /cvs/extras/rpms/389-console/F-10/389-console.spec,v <-- 389-console.spec new revision: 1.3; previous revision: 1.2 done Checking in F-11/389-console.spec; /cvs/extras/rpms/389-console/F-11/389-console.spec,v <-- 389-console.spec new revision: 1.3; previous revision: 1.2 done Checking in F-12/389-console.spec; /cvs/extras/rpms/389-console/F-12/389-console.spec,v <-- 389-console.spec new revision: 1.4; previous revision: 1.3 done Checking in devel/389-console.spec; /cvs/extras/rpms/389-console/devel/389-console.spec,v <-- 389-console.spec new revision: 1.4; previous revision: 1.3 done
389-console-1.1.3-5.fc12 has been submitted as an update for Fedora 12. http://admin.fedoraproject.org/updates/389-console-1.1.3-5.fc12
389-console-1.1.3-4.fc11 has been submitted as an update for Fedora 11. http://admin.fedoraproject.org/updates/389-console-1.1.3-4.fc11
389-console-1.1.3-4.fc10 has been submitted as an update for Fedora 10. http://admin.fedoraproject.org/updates/389-console-1.1.3-4.fc10
389-console-1.1.3-4.fc11 has been pushed to the Fedora 11 stable repository. If problems still persist, please make note of it in this bug report.
389-console-1.1.3-4.fc10 has been pushed to the Fedora 10 stable repository. If problems still persist, please make note of it in this bug report.
(In reply to comment #4) > I'm not really sure if specific fonts would be the right thing. That's the > issue that I'm fighting with. Probably the best thing to do would be to just > skip this. part. Who knows what fonts Gnome or KDE will default to in the > future and we don't want to force the user to use a certain font. Furthermore, > if someone wants to use a localized version of the product, something like > bitstream vera sans might not apply anymore or might not be optimal in CJK > languages or in scripted languages like Arabic or Farsi. > > The other option would be to include a single fallback font in the JDK > implementation. Technically, it should be a requirement for the > Swing/AWT/SWT/Java2D/etc. packages. Having just run in to this same problem on a headless Fedora13 system, I'd think that instead of having the exception just barf it would be helpful to catch that exception in the java code, and fail with a more useful message. Or yes, perhaps the jdk should have had a basic font package as a dependency? The common fonts is such a small package, and unlike other packages that have package dependencies that make almost no sense, having this one depend on one of the basic font packages (liberation-fonts-common?) seems comparatively reasonable.