public HostManifest(String file) throws Exception {
        Properties p=read(file);

        host=p.getProperty("host");
        if(host==null)
            throw new RuntimeException("host name is required in "+file);

        for(Object x:p.keySet()) {
            String name=(String)x;
            if(!reservedName(name)) {
                // This is an rpm
                String version=p.getProperty(name);
                RPMRequest request=new RPMRequest(name,version);
                if(requests.get(name)!=null)
                    throw new RuntimeException("Duplicate RPM name in "+file+":"+name);
                requests.put(name,request);
            }
        }

        HashSet<String> ctx=new HashSet<String>();
        p=processImports(file,p.getProperty("import"),ctx);
        if(p!=null) {
            for(Object x:p.keySet()) {
                String name=(String)x;
                if(!reservedName(name))
                    if(!requests.containsKey(name))
                        requests.put(name,new RPMRequest(name,p.getProperty(name)));
            }
        }
    }