We have a private network with geth 1.4.18 clients. We have 3 miners (each owned and managed by a different company) and a number of sync-only nodes. Now we would like to upgrade the network to 1.5.5. Since 1.5.5 includes the last hard fork, how do we smoothly switch the miners to the new consensus? Can we set a target block for the hard fork like it was done in the mainnet? Or do we have to simultaneously stop all nodes, upgrade and restart after all companies have upgraded?
while all the nodes are under your control you don't need to set a block you need to just stop(mining) wait for the all nodes to be synced and afterward update them.
Without changing geth's code, it is not possible to reconfigure target blocks for feature activations (EIPs, ...). The configuration is fixed via constants in the code (see ChainConfig). A custom configuration can be provided in genesis specification file, however, this is only applicable when setting up a new chain.
Hence, currently the only way to make a hard fork in a private network is to ensure that all participants shutdown/upgrade/restart in a predefined time slot.