]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_boot.py
5 import tornado
.httpserver
13 from handlers_base
import BaseHandler
15 BASEDIR
= os
.path
.dirname(__file__
)
17 def word_wrap(s
, width
=45):
18 paragraphs
= s
.split('\n')
20 for paragraph
in paragraphs
:
21 while len(paragraph
) > width
:
22 pos
= paragraph
.rfind(' ', 0, width
)
25 lines
.append(paragraph
[:pos
])
26 paragraph
= paragraph
[pos
:]
27 lines
.append(paragraph
.lstrip())
28 return '\n'.join(lines
)
30 class BootBaseHandler(BaseHandler
):
34 class MenuGPXEHandler(BootBaseHandler
):
39 # Check if version of the bootloader is recent enough.
40 # Otherwise send the latest version of the PXE loader.
41 user_agent
= self
.request
.headers
.get("User-Agent", None)
44 client
, version
= user_agent
.split("/")
48 # We replaced gPXE by iPXE.
50 return self
.serve_update()
52 # Everything under version 1.0.0 should be
55 return self
.serve_update()
58 self
.set_header("Content-Type", "text/plain")
59 self
.write("#!gpxe\n")
61 self
.write("set 209:string premenu.cfg\n")
62 self
.write("set 210:string http://boot.ipfire.org/\n")
63 self
.write("chain pxelinux.0\n")
65 def serve_update(self
):
66 self
.set_header("Content-Type", "text/plain")
67 self
.write("#!gpxe\n")
70 self
.write("echo\necho Your copy of gPXE/iPXE is too old. ")
71 self
.write("Upgrade to avoid seeing this every boot!\n")
73 self
.write("chain http://mirror0.ipfire.org/releases/ipfire-boot/latest/ipxe.kpxe\n")
76 class MenuCfgHandler(BootBaseHandler
):
78 self
.set_header("Content-Type", "text/plain")
80 latest_release
= self
.releases
.get_latest()
81 stable_releases
= self
.releases
.get_stable()
83 stable_releases
.remove(latest_release
)
87 development_releases
= self
.releases
.get_unstable()
89 self
.render("netboot/menu.cfg", latest_release
=latest_release
,
90 stable_releases
=stable_releases
, development_releases
=development_releases
)