Full Bootdisk with NFS install media

Problem:
I am trying to create my first proxy on different subnet from my primary foreman install. Eventually I want it to manage DHCP and TFTP for that subnet so I can provision additional servers there. In order to setup the initial server, I am trying to use the bootdisk plugin but I’m running into an issue.
If I use the built in Centos 8 Install Media, it works fine. I would like to use RHEL for my infrastructure since it’s better supported and I have the free Developers subscription for my use at home. The problem is that the free subscription doesnt include rights to use the katello subscription so it doesnt integrate as designed. I instead had to download the iso, share it out as an nfs export, and create a custom install media. I have no problems installing RHEL when I TFTP boot a server on the current subnet.
When I try to use my nfs exported rhel iso as the install media for the bootdisk, I start getting internal server errors. It appears that the bootdisk plugin is only looking for an http server. I dont see any documentation in the plugin README about it only working for http sources.

Error Message displayed :
Oops, we’re sorry but something went wrong Failed to open TCP connection to nfs-1.app.mydomain:80 (Connection refused - connect(2) for “nfs-1.app.mydomain” port 80)

Expected outcome:
Bootdisk creates an ISO using nfs exported

Foreman and Proxy versions:

System Information

Version 2.4.0 © 2009-2021 Paul Kelly and Ohad Levy

Foreman and Proxy plugin versions:
foreman-tasks: 4.0.1
foreman_ansible: 6.2.0
foreman_bootdisk: 17.0.2
foreman_discovery: 16.3.4
foreman_remote_execution: 4.3.0
katello: 4.0.0

Distribution and version:
Red Hat Enterprise Linux release 8.3 (Ootpa)

Other relevant data:
section of /var/log/foreman/production.log
2021-05-02T14:38:09 [I|app|51700130] Started GET “/bootdisk/disks/full_hosts/proxy-1.srv.mydomain” for 10.10.8.226 at 2021-05-02 14:38:09 -0400
2021-05-02T14:38:09 [I|app|51700130] Processing by ForemanBootdisk::DisksController#full_host as HTML
2021-05-02T14:38:09 [I|app|51700130] Parameters: {“id”=>“proxy-1.srv.mydomain”}
2021-05-02T14:38:09 [D|tax|51700130] Current location set to none
2021-05-02T14:38:09 [D|tax|51700130] Current organization set to none
2021-05-02T14:38:09 [D|tax|51700130] Current organization set to MyOrg
2021-05-02T14:38:09 [D|tax|51700130] Current location set to Home
2021-05-02T14:38:09 [D|tax|51700130] Current location set to none
2021-05-02T14:38:09 [D|tax|51700130] Current organization set to none
2021-05-02T14:38:09 [D|tax|51700130] Current organization set to MyOrg
2021-05-02T14:38:09 [D|tax|51700130] Current location set to Home
2021-05-02T14:38:09 [D|tax|51700130] Current location set to none
2021-05-02T14:38:09 [D|tax|51700130] Current organization set to none
2021-05-02T14:38:09 [I|for|51700130] Fetching nfs://nfs-1.app.mydomain/data/media/8/3/images/pxeboot/vmlinuz
2021-05-02T14:38:09 [W|app|51700130] Failed to open TCP connection to nfs-1.app.mydomain:80 (Connection refused - connect(2) for “nfs-1.app.mydomain” port 80)
2021-05-02T14:38:09 [I|app|51700130] Backtrace for ‘Failed to open TCP connection to nfs-1.app.mydomain:80 (Connection refused - connect(2) for “nfs-1.app.mydomain” port 80)’ error (Errno::ECONNREFUSED): Failed to open TCP connection to nfs-1.app.mydomain:80 (Connection refused - connect(2) for “nfs-1.app.mydomain” port 80)
51700130 | /usr/share/ruby/net/http.rb:939:in rescue in block in connect' 51700130 | /usr/share/ruby/net/http.rb:936:in block in connect’
51700130 | /usr/share/ruby/timeout.rb:93:in block in timeout' 51700130 | /usr/share/ruby/timeout.rb:103:in timeout’
51700130 | /usr/share/ruby/net/http.rb:935:in connect' 51700130 | /usr/share/ruby/net/http.rb:920:in do_start’
51700130 | /usr/share/ruby/net/http.rb:909:in start' 51700130 | /usr/share/ruby/net/http.rb:609:in start’
51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:203:in block in fetch' 51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:193:in open’
51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:193:in fetch' 51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:148:in block in generate’
51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:147:in each' 51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:147:in generate’
51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/services/foreman_bootdisk/iso_generator.rb:28:in generate_full_host' 51700130 | /usr/share/gems/gems/foreman_bootdisk-17.0.2/app/controllers/foreman_bootdisk/disks_controller.rb:46:in full_host’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/basic_implicit_render.rb:6:in send_action' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/abstract_controller/base.rb:195:in process_action’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/rendering.rb:30:in process_action' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/abstract_controller/callbacks.rb:42:in block in process_action’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:112:in block in run_callbacks' 51700130 | /usr/share/foreman/app/controllers/concerns/foreman/controller/timezone.rb:10:in set_timezone’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:121:in block in run_callbacks' 51700130 | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:32:in clear_thread’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:121:in block in run_callbacks' 51700130 | /usr/share/foreman/app/controllers/concerns/foreman/controller/topbar_sweeper.rb:12:in set_topbar_sweeper_controller’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:121:in block in run_callbacks' 51700130 | /usr/share/gems/gems/audited-4.9.0/lib/audited/sweeper.rb:14:in around’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:121:in block in run_callbacks' 51700130 | /usr/share/gems/gems/audited-4.9.0/lib/audited/sweeper.rb:14:in around’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:121:in block in run_callbacks' 51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:139:in run_callbacks’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/abstract_controller/callbacks.rb:41:in process_action' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/rescue.rb:22:in process_action’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/instrumentation.rb:33:in block in process_action' 51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/notifications.rb:180:in block in instrument’
51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/notifications/instrumenter.rb:24:in instrument' 51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/notifications.rb:180:in instrument’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/instrumentation.rb:32:in process_action' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal/params_wrapper.rb:245:in process_action’
51700130 | /usr/share/gems/gems/activerecord-6.0.3.4/lib/active_record/railties/controller_runtime.rb:27:in process_action' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/abstract_controller/base.rb:136:in process’
51700130 | /usr/share/gems/gems/actionview-6.0.3.4/lib/action_view/rendering.rb:39:in process' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal.rb:190:in dispatch’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_controller/metal.rb:254:in dispatch' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/route_set.rb:50:in dispatch’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/route_set.rb:33:in serve' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:49:in block in serve’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:32:in each' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:32:in serve’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/route_set.rb:834:in call' 51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/engine.rb:527:in call’
51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/railtie.rb:190:in public_send' 51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/railtie.rb:190:in method_missing’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/mapper.rb:19:in block in <class:Constraints>' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/mapper.rb:48:in serve’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:49:in block in serve' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:32:in each’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/journey/router.rb:32:in serve' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/routing/route_set.rb:834:in call’
51700130 | /usr/share/gems/gems/katello-4.0.0/lib/katello/middleware/event_daemon.rb:10:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call' 51700130 | /usr/share/gems/gems/apipie-dsl-2.3.0/lib/apipie_dsl/static_dispatcher.rb:67:in call’
51700130 | /usr/share/gems/gems/apipie-rails-0.5.17/lib/apipie/static_dispatcher.rb:66:in call' 51700130 | /usr/share/gems/gems/apipie-rails-0.5.17/lib/apipie/extractor/recorder.rb:137:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call’
51700130 | /usr/share/foreman/lib/foreman/middleware/telemetry.rb:10:in call' 51700130 | /usr/share/gems/gems/apipie-rails-0.5.17/lib/apipie/middleware/checksum_in_headers.rb:27:in call’
51700130 | /usr/share/foreman/lib/foreman/middleware/catch_json_parse_errors.rb:9:in call' 51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in call’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/etag.rb:27:in call' 51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/conditional_get.rb:27:in call’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/head.rb:12:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/http/content_security_policy.rb:18:in call’
51700130 | /usr/share/foreman/lib/foreman/middleware/logging_context_session.rb:22:in call' 51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:266:in context’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/session/abstract/id.rb:260:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/cookies.rb:648:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/callbacks.rb:27:in block in call' 51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/callbacks.rb:101:in run_callbacks’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/callbacks.rb:26:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/actionable_exceptions.rb:18:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/debug_exceptions.rb:32:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/show_exceptions.rb:33:in call’
51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/rack/logger.rb:37:in call_app' 51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/rack/logger.rb:28:in call’
51700130 | /usr/share/gems/gems/sprockets-rails-3.2.1/lib/sprockets/rails/quiet_assets.rb:13:in call' 51700130 | /usr/share/foreman/lib/foreman/middleware/logging_context_request.rb:11:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/remote_ip.rb:81:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/request_id.rb:27:in call’
51700130 | /usr/share/gems/gems/katello-4.0.0/lib/katello/prevent_json_parsing.rb:12:in call' 51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/method_override.rb:24:in call’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/runtime.rb:22:in call' 51700130 | /usr/share/gems/gems/activesupport-6.0.3.4/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in call’
51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/executor.rb:14:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/static.rb:126:in call’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/sendfile.rb:110:in call' 51700130 | /usr/share/gems/gems/actionpack-6.0.3.4/lib/action_dispatch/middleware/host_authorization.rb:76:in call’
51700130 | /usr/share/gems/gems/secure_headers-6.3.0/lib/secure_headers/middleware.rb:11:in call' 51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/engine.rb:527:in call’
51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/railtie.rb:190:in public_send' 51700130 | /usr/share/gems/gems/railties-6.0.3.4/lib/rails/railtie.rb:190:in method_missing’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in block in call' 51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in each’
51700130 | /usr/share/gems/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in call' 51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/configuration.rb:246:in call’
51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/request.rb:76:in block in handle_request' 51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/thread_pool.rb:337:in with_force_shutdown’
51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/request.rb:75:in handle_request' 51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/server.rb:431:in process_client’
51700130 | /usr/share/gems/gems/puma-5.1.1/lib/puma/thread_pool.rb:145:in block in spawn_thread' 51700130 | /usr/share/gems/gems/logging-2.3.0/lib/logging/diagnostic_context.rb:474:in block in create_with_logging_context’
2021-05-02T14:38:09 [I|app|51700130] Rendering common/500.html.erb within layouts/application
2021-05-02T14:38:09 [I|app|51700130] Rendered common/500.html.erb within layouts/application (Duration: 1.3ms | Allocations: 892)
2021-05-02T14:38:09 [I|app|51700130] Rendered layouts/_application_content.html.erb (Duration: 2.1ms | Allocations: 6014)
2021-05-02T14:38:09 [I|app|51700130] Rendering layouts/base.html.erb
2021-05-02T14:38:09 [I|app|51700130] Rendered layouts/base.html.erb (Duration: 3.7ms | Allocations: 7793)
2021-05-02T14:38:09 [I|app|51700130] Completed 500 Internal Server Error in 237ms (Views: 14.6ms | ActiveRecord: 16.9ms | Allocations: 276693)

I also tried to install a blank httpd server on my nfs server just to trick it out, but recieved a different error
Oops, we’re sorry but something went wrong undefined method `request_uri’ for #URI::Generic:0x00007f079511b018

Hey, use HTTP instead, although NFS is supported by Anacondy, we do not test it to narrow down amount of provisioning workflows. Foreman already supports like 15 ways of installing from HTTP so you have many options there.

1 Like

Thanks Izap, I just switched my nfs server over to an http server and it’s working fine. Did I miss anything in the docs saying that HTTP is the only fully supported install method? Just wondering if there is some way to help the next guy if anyone is trying to use NFS to host install media.

2 Likes

I like your thinking, no I do not think we have mentioned that and we should. Feel free to file a PR to our docs:

Probably this guide fits the best:

https://docs.theforeman.org/nightly/Provisioning_Guide/index-foreman-el.html

Or better if you get NFS working then feel free to document that as well. We won’t be actively testing that as I said tho. I think if you can stick with HTTP it is better idea overall :slight_smile: