Class: Yast::ArchClass

Inherits:
Module
  • Object
show all
Defined in:
library/general/src/modules/Arch.rb

Instance Method Summary collapse

Instance Method Details

#aarch64Object

true for all aarch64 (ARM64) architectures



169
170
171
# File 'library/general/src/modules/Arch.rb', line 169

def aarch64
  architecture == "aarch64"
end

#alphaObject

true for all alpha architectures



128
129
130
# File 'library/general/src/modules/Arch.rb', line 128

def alpha
  architecture == "alpha"
end

#arch_shortString

Returns general architecture type (one of sparc, ppc, s390, i386, alpha, ia64, x86_64, arm, aarch64)



176
177
178
179
180
181
182
183
184
185
186
# File 'library/general/src/modules/Arch.rb', line 176

def arch_short
  if sparc
    "sparc"
  elsif ppc
    "ppc"
  elsif s390
    "s390"
  else
    architecture
  end
end

#architectureString

Returns full architecture type (one of i386, sparc, sparc64, ppc, ppc64, alpha, s390_32, s390_64, ia64, x86_64, arm, aarch64)



71
72
73
74
75
76
77
78
# File 'library/general/src/modules/Arch.rb', line 71

def architecture
  if @_architecture.nil?
    @_architecture = Convert.to_string(
      SCR.Read(path(".probe.architecture"))
    )
  end
  @_architecture
end

#armObject

true for all 32-bit ARM architectures



164
165
166
# File 'library/general/src/modules/Arch.rb', line 164

def arm
  architecture == "arm"
end

#board_chrpObject

true for all “CHRP” ppc boards



294
295
296
# File 'library/general/src/modules/Arch.rb', line 294

def board_chrp
  ppc && board_compatible == "CHRP"
end

#board_compatibleObject

************************************************************ general system board types (initialized in constructor)



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
# File 'library/general/src/modules/Arch.rb', line 191

def board_compatible
  if @_board_compatible.nil?
    @_checkgeneration = ""
    systemProbe = Convert.convert(
      SCR.Read(path(".probe.system")),
      from: "any",
      to:   "list <map>"
    )
    systemProbe = [] if systemProbe.nil?

    Builtins.foreach(systemProbe) do |systemEntry|
      checksys = Ops.get_string(systemEntry, "system", "")
      @_checkgeneration = Ops.get_string(systemEntry, "generation", "")
      @_board_compatible = checksys if checksys != ""
    end
    Builtins.y2milestone("_board_compatible '%1' \n", @_board_compatible)
    @_board_compatible = "wintel" if i386 || x86_64
    # hwinfo expects CHRP/PReP/iSeries/MacRISC*/PowerNV in /proc/cpuinfo
    # there is no standard for the board identification
    # Cell and Maple based boards have no CHRP in /proc/cpuinfo
    # Pegasos and Cell do have CHRP in /proc/cpuinfo, but Pegasos2 should no be handled as CHRP
    # Efika is handled like Pegasos for the time being

    if ppc && (@_board_compatible.nil? || @_board_compatible == "CHRP")
      device_type = Convert.to_map(
        SCR.Execute(
          path(".target.bash_output"),
          "echo -n `cat /proc/device-tree/device_type`",
          {}
        )
      )
      model = Convert.to_map(
        SCR.Execute(
          path(".target.bash_output"),
          "echo -n `cat /proc/device-tree/model`",
          {}
        )
      )
      board = Ops.get_string(model, "stdout", "")
      Builtins.y2milestone(
        "model %1 , device_type %2\n",
        model,
        device_type
      )
      # catch remaining IBM boards
      if Builtins.issubstring(
        Ops.get_string(device_type, "stdout", ""),
        "chrp"
      )
        @_board_compatible = "CHRP"
      end
      # Maple has its own way of pretenting OF1275 compliance
      if board == "Momentum,Maple-D" || board == "Momentum,Maple-L" ||
          board == "Momentum,Maple"
        @_board_compatible = "CHRP"
      end
      # Pegasos has CHRP in /proc/cpuinfo and 'chrp' in /proc/device-tree/device_type
      if board == "Pegasos2" ||
          Builtins.issubstring(
            Builtins.tolower(Ops.get_string(device_type, "stdout", "")),
            "pegasos2"
          )
        @_board_compatible = "Pegasos"
      end
      # Efika has CHRP in /proc/cpuinfo and 'efika' in /proc/device-tree/device_type
      if Builtins.issubstring(Builtins.tolower(board), "efika") ||
          Builtins.issubstring(
            Builtins.tolower(Ops.get_string(device_type, "stdout", "")),
            "efika"
          )
        @_board_compatible = "Pegasos"
      end
    end
    # avoid future re-probing if probing failed
    # also avoid passing nil outside the module
    if fun_ref(method(:board_compatible), "string ()").nil?
      @_board_compatible = ""
    end
  end
  @_board_compatible
end

#board_iseriesObject

true for all “iSeries” ppc boards



305
306
307
# File 'library/general/src/modules/Arch.rb', line 305

def board_iseries
  ppc && board_compatible == "iSeries"
end

#board_macObject

true for all PPC “MacRISC” boards



274
275
276
277
278
279
# File 'library/general/src/modules/Arch.rb', line 274

def board_mac
  ppc &&
    (board_compatible == "MacRISC" || board_compatible == "MacRISC2" ||
      board_compatible == "MacRISC3" ||
      board_compatible == "MacRISC4")
end

#board_mac_newObject

true for all “NewWorld” PowerMacs



282
283
284
285
# File 'library/general/src/modules/Arch.rb', line 282

def board_mac_new
  # board_mac calls board_compatible which initializes _checkgeneration
  board_mac && @_checkgeneration == "NewWorld"
end

#board_mac_oldObject

true for all “OldWorld” powermacs



288
289
290
291
# File 'library/general/src/modules/Arch.rb', line 288

def board_mac_old
  # board_mac calls board_compatible which initializes _checkgeneration
  board_mac && @_checkgeneration == "OldWorld"
end

#board_pegasosObject

true for all “Pegasos” and “Efika” ppc boards



315
316
317
# File 'library/general/src/modules/Arch.rb', line 315

def board_pegasos
  ppc && board_compatible == "Pegasos"
end

#board_powernvObject

true for all baremetal Power8 systems github.com/open-power/docs



300
301
302
# File 'library/general/src/modules/Arch.rb', line 300

def board_powernv
  ppc && board_compatible == "PowerNV"
end

#board_prepObject

true for all “PReP” ppc boards



310
311
312
# File 'library/general/src/modules/Arch.rb', line 310

def board_prep
  ppc && board_compatible == "PReP"
end

#board_wintelObject

true for all “Windows/Intel” compliant boards (x86 based)



320
321
322
# File 'library/general/src/modules/Arch.rb', line 320

def board_wintel
  board_compatible == "wintel"
end

#has_pcmciaObject

true if the system supports PCMCIA But modern notebook computers do not have it. See also Bugzilla #151813#c10

See Also:



331
332
333
334
335
336
# File 'library/general/src/modules/Arch.rb', line 331

def has_pcmcia
  if @_has_pcmcia.nil?
    @_has_pcmcia = Convert.to_boolean(SCR.Read(path(".probe.has_pcmcia")))
  end
  @_has_pcmcia
end

#has_smpObject

true if running on multiprocessor board. This only reflects the board, not the actual number of CPUs or the running kernel!



484
485
486
487
488
489
490
491
492
493
# File 'library/general/src/modules/Arch.rb', line 484

def has_smp
  if @_has_smp.nil?
    @_has_smp = Convert.to_boolean(SCR.Read(path(".probe.has_smp")))
  end
  if alpha
    # get smp for alpha from /etc/install.inf
    setSMP(SCR.Read(path(".etc.install_inf.SMP")) == "1")
  end
  @_has_smp
end

#i386Object

true for all x86 compatible architectures



81
82
83
# File 'library/general/src/modules/Arch.rb', line 81

def i386
  architecture == "i386"
end

#ia64Object

true for all IA64 (itanium) architectures



154
155
156
# File 'library/general/src/modules/Arch.rb', line 154

def ia64
  architecture == "ia64"
end

#is_kvmObject

true if KVM is running



439
440
441
442
443
444
445
446
447
448
449
# File 'library/general/src/modules/Arch.rb', line 439

def is_kvm
  if @_is_kvm.nil?
    # KVM hypervisor has /dev/kvm file
    stat = Convert.to_map(SCR.Read(path(".target.stat"), "/dev/kvm"))
    Builtins.y2milestone("stat /dev/kvm: %1", stat)

    @_is_kvm = Ops.greater_than(Builtins.size(stat), 0)
  end

  @_is_kvm
end

#is_laptopObject

true if the system runs on laptop



341
342
343
344
345
346
347
348
349
350
351
352
# File 'library/general/src/modules/Arch.rb', line 341

def is_laptop
  if @_is_laptop.nil?
    system = Convert.convert(
      SCR.Read(path(".probe.system")),
      from: "any",
      to:   "list <map>"
    )
    formfactor = Ops.get_string(system, [0, "formfactor"], "")
    @_is_laptop = formfactor == "laptop"
  end
  @_is_laptop
end

#is_umlObject

Deprecated.

true if UML



360
361
362
363
364
365
# File 'library/general/src/modules/Arch.rb', line 360

def is_uml
  if @_is_uml.nil?
    @_is_uml = Convert.to_boolean(SCR.Read(path(".probe.is_uml")))
  end
  @_is_uml
end

#is_xenObject

true if Xen kernel is running (dom0 or domU)



371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# File 'library/general/src/modules/Arch.rb', line 371

def is_xen
  if @_is_xen.nil?
    # XEN kernel has /proc/xen directory
    stat = Convert.to_map(SCR.Read(path(".target.stat"), "/proc/xen"))
    Builtins.y2milestone("stat /proc/xen: %1", stat)

    @_is_xen = Ops.greater_than(Builtins.size(stat), 0)

    if @_is_xen
      Builtins.y2milestone("/proc/xen exists")

      # check also the running kernel
      # a FV machine has also /proc/xen, but the kernel is kernel-default
      out = Convert.to_map(
        SCR.Execute(path(".target.bash_output"), "uname -r", {})
      )

      kernel_ver = Ops.get_string(out, "stdout", "")
      l = Builtins.splitstring(kernel_ver, "\n")
      kernel_ver = Ops.get(l, 0, "")
      Builtins.y2milestone("Kernel version: %1", kernel_ver)

      if !Builtins.regexpmatch(kernel_ver, "-xen$") &&
          !Builtins.regexpmatch(kernel_ver, "-xenpae$")
        # kernel default is running
        @_is_xen = false
      end

      Builtins.y2milestone("kernel-xen is running: %1", @_is_xen)
    end
  end

  @_is_xen
end

#is_xen0Object

true if dom0 Xen kernel is running

See Also:



410
411
412
413
414
415
416
417
418
419
420
421
422
# File 'library/general/src/modules/Arch.rb', line 410

def is_xen0
  if @_is_xen0.nil?
    # dom0 Xen kernel has /proc/xen/xsd_port file
    stat = Convert.to_map(
      SCR.Read(path(".target.stat"), "/proc/xen/xsd_port")
    )
    Builtins.y2milestone("stat /proc/xen/xsd_port: %1", stat)

    @_is_xen0 = Ops.greater_than(Builtins.size(stat), 0)
  end

  @_is_xen0
end

#is_xenUObject

true if domU Xen kernel is running

See Also:



429
430
431
# File 'library/general/src/modules/Arch.rb', line 429

def is_xenU
  is_xen && !is_xen0
end

#is_zkvmObject

zKVM means KVM on IBM System z true if zKVM is running



458
459
460
461
462
463
464
465
# File 'library/general/src/modules/Arch.rb', line 458

def is_zkvm
  if @_is_zkvm.nil?
    # using different check than on x86 as recommended by IBM
    @_is_zkvm = s390 && Yast::WFM.Execute(path(".local.bash"), "egrep 'Control Program: KVM' /proc/sysinfo") == 0
  end

  @_is_zkvm
end

#mainObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'library/general/src/modules/Arch.rb', line 35

def main
  # local variables

  @_architecture = nil

  @_board_compatible = nil

  @_checkgeneration = ""

  @_has_pcmcia = nil

  @_is_laptop = nil

  @_is_uml = nil

  @_has_smp = nil

  # Xen domain (dom0 or domU)
  @_is_xen = nil

  # Xen dom0
  @_is_xen0 = nil

  # KVM
  @_is_kvm = nil

  # zKVM
  @_is_zkvm = nil
end

#ppcObject

true for all ppc architectures (32 or 64 bit)

See Also:



123
124
125
# File 'library/general/src/modules/Arch.rb', line 123

def ppc
  ppc32 || ppc64
end

#ppc32Object

true for all 32bit ppc architectures

See Also:



109
110
111
# File 'library/general/src/modules/Arch.rb', line 109

def ppc32
  architecture == "ppc"
end

#ppc64Object

true for all 64bit ppc architectures

See Also:



116
117
118
# File 'library/general/src/modules/Arch.rb', line 116

def ppc64
  architecture == "ppc64"
end

#s390Object

true for all S/390 architectures (32 or 64 bit)

See Also:



149
150
151
# File 'library/general/src/modules/Arch.rb', line 149

def s390
  s390_32 || s390_64
end

#s390_32Object

true for all 32bit S/390 architectures

See Also:



135
136
137
# File 'library/general/src/modules/Arch.rb', line 135

def s390_32
  architecture == "s390_32"
end

#s390_64Object

true for all 64bit S/390 architectures

See Also:



142
143
144
# File 'library/general/src/modules/Arch.rb', line 142

def s390_64
  architecture == "s390_64"
end

#setSMP(is_smp) ⇒ Object

Set “Arch::has_smp ()”. Since Alpha doesn't reliably probe smp, 'has_smp' must be set later with this function.

Examples:

setSMP(true);



474
475
476
477
478
# File 'library/general/src/modules/Arch.rb', line 474

def setSMP(is_smp)
  @_has_smp = is_smp

  nil
end

#sparcObject

true for all sparc architectures (32 or 64 bit)

See Also:



102
103
104
# File 'library/general/src/modules/Arch.rb', line 102

def sparc
  sparc32 || sparc64
end

#sparc32Object

true for all 32bit sparc architectures

See Also:



88
89
90
# File 'library/general/src/modules/Arch.rb', line 88

def sparc32
  architecture == "sparc"
end

#sparc64Object

true for all 64bit sparc architectures

See Also:



95
96
97
# File 'library/general/src/modules/Arch.rb', line 95

def sparc64
  architecture == "sparc64"
end

#x11_setup_neededObject

run X11 configuration after inital boot this is false in case of: installation on iSeries, installation on S390

See Also:

  • Yast::ArchClass#Installation#Installation::x11_setup_needed


502
503
504
505
506
# File 'library/general/src/modules/Arch.rb', line 502

def x11_setup_needed
  # disable X11 setup after initial boot
  return false if board_iseries || s390
  true
end

#x86_64Object

true for all x86-64 (AMD Hammer) architectures



159
160
161
# File 'library/general/src/modules/Arch.rb', line 159

def x86_64
  architecture == "x86_64"
end