After upgrading nerves_bootstrap 1.9.0, I can’t upload firmware to target any more for the error.
mix nerves.new app → make a new project
mix deps.get → The comments came out.
A new version of Nerves bootstrap is available(1.8.1 < 1.9.0), You can update by running
mix local.nerves
after update the above, mix deps.get runs.
** (RuntimeError) :nerves_ssh isn't configured, but :nerves_firmware_ssh is.
This is probably not right. If you recently upgraded to :nerves_ssh or
a library that uses it like :nerves_pack, you'll need to edit your config.exs
and rename references to :nerves_firmware_ssh to :nerves_ssh.
modified nerves_firmware.ssh to nerves_ssh as the comments in config/target.exe
mix firmware and ./upload_sh execute
$ ./upload.sh
Path: ./_build/rpi3_dev/nerves/images/connect.fw
Product: connect 0.1.0
UUID: f524800a-2aa7-5f60-7bec-f3a86f32caa3
Platform: rpi3
Uploading to nerves.local...
subsystem request failed on channel 0
After all I can’t upload because of subsystem request failed
I check the previous project if I can upload or not with compiling processes. This case is all right. .ssh/id_rsa.pub is the same.
And ssh nerves.local passes to make a remote terminal.
I upgrade fwup 1.8.0 -> 1.8.1 but this didn’t solve the issue.
I assume that ssh_subsystem_fwup which is deps of nerves_ssh has something wrong and I should set something on configuration.
Thanks for posting so many details. I’ll try to explain what’s happening and what you can do to fix it.
The switch from nerves_firmware_ssh to nerves_ssh changes the TCP port number that firmware updates get sent. nerves_firmware_ssh uses TCP port 8989. nerves_ssh uses TCP port 22. Why the change of ports? The short story is that it centralizes SSH daemon configuration - IEx prompt, SFTP, and firmware updates all get authenticated the same way.
It looks like you are using the upload.sh script from nerves_ssh to update a device that is running nerves_firmware_ssh. The "subsystem request failed" error is due to the upload script trying to send the firmware file to an ssh subsystem on TCP port 22. That doesn’t exist with nerves_firmware_ssh so you get an error.
To fix this:
Find a nerves_firmware_sshupload.sh script or download this one. Call it upload-old.sh
Run ./upload-old.sh to push the new firmware to the device
Subsequent uploads should be done with the new upload.sh script (since nerves_ssh is now running on the device).
Another option is to continue to use nerves_firmware_ssh. If you’re using nerves_pack to pull in firmware update support, lock your nerves_pack dependency to ~> 0.3.0.