source: client/shared/lib/os-probes/mounted/20microsoft @ 1d1e06d

Last change on this file since 1d1e06d was 2cd8344, checked in by adv <adv@…>, 8 years ago

#796 os-probes librerias de grub con detección de nuevas versiones de sistemas opertativos (p.e win10). usado solo para ogLives antiguos (kernel 3.2)

git-svn-id: https://opengnsys.es/svn/branches/version1.1@5378 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 4.3 KB
Line 
1#!/bin/sh
2# Detects all Microsoft OSes on a collection of partitions.
3
4. /usr/share/os-prober/common.sh
5
6partition="$1"
7mpoint="$2"
8type="$3"
9
10# This script looks for legacy BIOS bootloaders only. Skip if running UEFI
11if [ -d /sys/firmware/efi ] && [ ! -f /var/lib/partman/ignore_uefi ] && [ -z "$WINOSDATA" ]; then
12        debug "Skipping legacy bootloaders on UEFI system"
13        exit 1
14fi
15
16# Weed out stuff that doesn't apply to us
17case "$type" in
18        ntfs|ntfs-3g) debug "$1 is a NTFS partition" ;;
19        vfat) debug "$1 is a FAT32 partition" ;;
20        msdos) debug "$1 is a FAT16 partition" ;;
21        fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
22        fuse|fuseblk) debug "$1 is a FUSE partition" ;; # might be ntfs-3g
23        *) debug "$1 is not a MS partition: exiting"; exit 1 ;;
24esac
25
26found=
27# Vista (previously Longhorn)
28if item_in_dir -q bootmgr "$2"; then
29        # there might be different boot directories in different case as:
30        # boot Boot BOOT
31        for boot in $(item_in_dir boot "$2"); do
32                bcd=$(item_in_dir bcd "$2/$boot")
33                if [ -n "$bcd" ]; then
34                        if   grep -aqs "W.i.n.d.o.w.s. .1.0" "$2/$boot/$bcd"; then
35                                long="Windows 10 (loader)"
36                        elif grep -aqs "W.i.n.d.o.w.s. .8" "$2/$boot/$bcd"; then
37                                long="Windows 8 (loader)"
38                        elif grep -aqs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
39                                long="Windows 7 (loader)"
40                        elif grep -aqs "W.i.n.d.o.w.s. .V.i.s.t.a" "$2/$boot/$bcd"; then
41                                long="Windows Vista (loader)"
42                        elif grep -aqs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8. .R.2." "$2/$boot/$bcd"; then
43                                long="Windows Server 2008 R2 (loader)"
44                        elif grep -aqs "W.i.n.d.o.w.s. .S.e.r.v.e.r. .2.0.0.8." "$2/$boot/$bcd"; then
45                                long="Windows Server 2008 (loader)"
46                        elif grep -aqs "W.i.n.d.o.w.s. .R.e.c.o.v.e.r.y. .E.n.v.i.r.o.n.m.e.n.t" "$2/$boot/$bcd"; then
47                                long="Windows Recovery Environment (loader)"
48                        elif grep -aqs "W.i.n.d.o.w.s. .S.e.t.u.p" "$2/$boot/$bcd"; then
49                                long="Windows Recovery Environment (loader)"
50                        else
51                                long="Windows Vista (loader)"
52                        fi
53                        short=Windows
54
55                        found=true
56
57                        break
58                fi
59        done
60fi
61
62# 2000/XP/NT4.0
63if [ -z "$found" ] && item_in_dir -q ntldr "$2" && item_in_dir -q ntdetect.com "$2"; then
64        long="Windows NT/2000/XP"
65        short=Windows
66        ini=$(item_in_dir boot.ini "$2")
67        if [ -n "$ini" ]; then
68                multicount="$(grep -e "^multi" "$2/$ini" | wc -l)"
69                scsicount="$(grep -e "^scsi" "$2/$ini" | wc -l)"
70                msoscount="$(expr "${multicount}" + "${scsicount}")"
71                if [ "$msoscount" -eq 1 ]; then
72                        # We need to remove a Carriage Return at the end of
73                        # the line...
74                        defaultmspart="$(grep -e "^default=" "$2/$ini" | cut -d '=' -f2 | tr -d '\r')"
75                        # Escape any backslashes in defaultmspart
76                        grepexp="^$(echo "$defaultmspart" | sed -e 's/\\/\\\\/')="
77                        # Colons not allowed; replace by spaces
78                        # Accented characters (non UTF-8) cause debconf to
79                        # hang, so we fall back to the default if the name
80                        # contains any weird characters.
81                        long="$(grep -e "$grepexp" "$2/$ini" | cut -d '"' -f2 | \
82                                tr ':' ' ' | LC_ALL=C grep -v '[^a-zA-Z0-9 &()/_-]')"
83                        if [ -z "$long" ]; then
84                                long="Windows NT/2000/XP"
85                        fi
86                else
87                        long="Windows NT/2000/XP (loader)"
88                fi
89
90                found=true
91        fi
92fi
93
94# MS-DOS
95if [ -z "$found" ] && item_in_dir -q dos "$2"; then
96        long="MS-DOS 5.x/6.x/Win3.1"
97        short=MS-DOS
98
99        found=true
100fi
101
102# 95/98/Me
103if [ -z "$found" ] && item_in_dir -q windows "$2" &&
104     item_in_dir -q win.com "$2"/"$(item_in_dir windows "$2")"; then
105        long="Windows 95/98/Me"
106        short=Windows9xMe
107
108        found=true
109fi
110
111
112# Restrict to partitions containing the OS
113if [ -n "$WINOSDATA" ]; then
114    found=
115    if [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/StartUp" ]; then
116        long=${long:-"Windows 8 (data)"}
117        short=${short:-"Windows"}
118        found=true
119    elif [ -d "$2/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup" ]; then
120        long=${long:-"Windows 7 (data)"}
121        short=${short:-"Windows"}
122        found=true
123    elif [ -d "$2/Documents and Settings/All Users/Start Menu/Programs/Startup" ]; then
124        long=${long:-"Windows XP/Vista (data)"}
125        short=${short:-"Windows"}
126        found=true
127    elif [ -d "$2/Winnt/Profiles/All Users/Start Menu/Programs/Startup" ]; then
128        long=${long:-"Windows NT (data)"}
129        short=${short:-"Windows"}
130        found=true
131    fi
132fi
133
134if [ -z "$found" ]; then
135        exit 1
136fi
137
138label="$(count_next_label "$short")"
139result "${partition}:${long}:${label}:chain"
140exit 0
Note: See TracBrowser for help on using the repository browser.